property 定义属性来修饰用的atomic,nonatomic
atomic:保证线程安全的,速度不快,因为要保证操作整体完成 (默认的)
nonatomic:不保证线程安全,速度快,如有多个线程访问同一个属性,会出现无法预料的结果
两者的区别在与生成的set/get方法上面
nonatomic 修饰的时候set/get方法是普通的付值
- (UITextField *) userName {
return userName;
}
- (void) setUserName:(UITextField *)userName_ {
[userName_ retain];
[userName release];
userName = userName_;
}
atomic 修饰的时候添加一个线程锁来保证一个方法的完整运行完成,之后在做接下来的事情
- (UITextField *) userName {
UITextField *retval = nil;
@synchronized(self) {(synchronized线程锁 括号内的方法锁住,直到执行完成)
retval = [[userName retain] autorelease];//添加引用计数方式调用set的时候被释放掉
}
return retval;
}
- (void) setUserName:(UITextField *)userName_ {
@synchronized(self) { (synchronized线程锁 括号内的方法锁住,直到执行完成)
[userName release];
userName = [userName_ retain];
}
}