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。
时间: 2024-10-12 03:01:10