在XCode4.5以上,写了@property之后,系统会自动生成私有_字段和实现@synthesize方法
但如果自己写了set或者get方法之后,就不会帮你产生默认的下划线字段
Student.h:
#import <Foundation/Foundation.h>
@interface Student : NSObject{
@public //以下就是共有类型 还有@private和@protected
int _age;
int _no;
}
@property int age;//自动申明getter和setter方法
@property int no;
//-(int)age;
//-(int)no;
OC里面没有构造方法
//-(void)setAge:(int)newAge; //setAge:是它的方法名(注意要带上冒号)
//-(void)setNo:(int)newNo;
//
//-(void)setAge:(int)newAge AndNo:(int)newNo; //setAge: AdnNo:是它方法名
-(id)initWithAge:(int)newAge andWithNo:(int)newNo;
//-(NSString *)description;
@end
Student.m:
#import "Student.h"
@implementation Student
@synthesize age=_age,no=_no;//自动实现setter和getter方法
//#pragma mark - setter
//#pragma mark 设置年龄
//-(void)setAge:(int)newAge{
// age=newAge;
//}
//#pragma mark 设置学号
//-(void)setNo:(int)newNo{
// no=newNo;
//}
//#pragma mark 设置年龄跟学号
//-(void)setAge:(int)newAge AndNo:(int)newNo{
// age=newAge;
// no=newNo;
//}
//#pragma mark - getter
//#pragma mark 获得学号
//-(int)no{
// return no;
//}
//#pragma mark 获得年龄
//-(int)age{
// return age;
//}
#pragma mark - 构造方法
#pragma mark 通过传入年龄和学号初始化一个构造方法
-(id)initWithAge:(int)newAge andWithNo:(int)newNo{
if(self=[super init]) //首先要初始化父类方法
{
_age=newAge;
_no=newNo;
return self;
}
return nil;
}
//重写父类的description方法
//-(NSString *)description{
// NSString * str =[NSString stringWithFormat:@"age is %i and no is ",self.age,self.no];
// return str;
//}
@end
main:
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Student * student=[[[Student alloc] initWithAge:20 andWithNo:1] autorelease]; //自动释放
NSLog(@"this student age=%i,and no=%i",[student age],[student no]);
NSLog(@"age=%i,no=%i",student.age,student.no);
NSLog(@"%@",student);//打印内存地址
//[student release];//防止内存泄漏,要释放该对象内存
}
return 0;
}
结果:
2013-08-02 15:55:34.918 @property[1396:303] this student age=20,and no=1
2013-08-02 15:55:34.919 @property[1396:303] age=20,no=1
2013-08-02 15:55:34.920 @property[1396:303] <Student: 0x100109970>