先来几段代码,dog类的.h .m文件 和main.m
dog.h
#import @interface dog : nsobject{ int _id; nsstring *_name; int _age; float _price;}//凡是用initxxx开头的都是构造函数//init方法实际上没有什么特别的,只是遵循命名约定的普通方法-(id)init;-(id)initwithid:(int)newid;-(id)initwithid:(int)newid andage:(int)newage;-(id)initwithid:(int)newid andage:(int)newage andprice:(int)newprice;@property int id;@property nsstring *name;@property int age;@property float price;@end
dog.m
#import dog.h@implementation dog-(id)init{ return [self initwithid:1001];}-(id)initwithid:(int)newid{ return [self initwithid:newid andage:20];}-(id)initwithid:(int)newid andage:(int)newage{ return [self initwithid:newid andage:newage andprice:80.0];}-(id)initwithid:(int)newid andage:(int)newage andprice:(int)newprice{ self=[super init]; if(self){ _id=newid; _age=newage; _price=newprice; } return self;}@synthesize id=_id;@synthesize name=_name;@synthesize age=_age;@synthesize price=_price;@end
main.m
#import #import dog.h#import nsstring+reversestring.h#import person.hint main(int argc, const char * argv[]){ @autoreleasepool { dog *dog1=[[dog alloc ] init]; dog1.name=@syj; nslog(@%@,[dog1 name]); [dog1 setname:@ldusyj]; nslog(@%@,dog1.name); } return 0;}
先看一下:
@property
@propertyint age;
等同于 -setage:(int)newage;
-(void)age;
@synthesize
@synthesize age=_age;
等同于: -(void)setage:(int)newage{
age=newage;
}
-(int)age{
return age;
}
在看一下点:1.
dog1.name=@syj;
点放到左边相当于调用其对应的set方法。等同
[dog1 setname:@syj];
2.
nslog(@%@,dog1.name);
nslog(@%@,[dog1 name]);
这两种情况是相同的效果。相当于get方法。
注意:
-(void)setage:(int)newage { nslog(@调用了setage方法:%i,newage); self.age = newage; }
不能在setage:方法中使用self.age = newage,相当于在setage:方法中调用[self setage:newage ], 出现死循环
-(int)age { nslog(@调用了age方法:%i,_age); return self.age; }
不能在age方法中使用return self.age, 相当于return [self age];, 出现了死循环
