1.首先讲@property, 这是iOS6以后出来的关键词. 用它声明一个属性之后, 编译器会自动给你生成setter和getter方法.
@property (nonatomic, retain) NSString *name;
setter方法如下:
-(void)setName:(NSString*)_name{ //首先判断是否与旧对象一致,如果不一致进行赋值。 //因为如果是一个对象的话,进行if内的代码会造成一个极端的情况:当此name的retain为1时,使此次的set操作让实例name提前释放,而达不到赋值目的。 if ( name != _name){ [name release]; name = [_name retain]; } }
getter方法如下
– (NSString *) name
{
return _name;
}
2. 而在.m中声明的@synthesize
@synthesize name = _name;
这样self.name = otherString和name = otherString都可以正常编译通过,,但是前者调用了setter方法进行了一次copy,后者没有,相当于assign/weak。
为何是一个人?也有善意的提醒: