@property中的声明列表已分类为如下几种:多线程
1, 声明属性的访问方法:atom
2,声明属性写操做权限:spa
3,声明写方法的实现:线程
-(void)setName:(NSString*)_name{ name = _name; }
retain
声明在setter方法中,须要对设过来的值进行retain 加1操做。如:code
-(void)setName:(NSString*)_name{ //首先判断是否与旧对象一致,若是不一致进行赋值。 //由于若是是一个对象的话,进行if内的代码会形成一个极端的状况:当此name的retain为1时,使这次的set操做让实例name提早释放,而达不到赋值目的。 if ( name != _name){ [name release]; name = [_name retain]; } }
4,访问方法的原子性:对象
[ _internal lock ]; // lock using an object-level lock id result = [ [ value retain ] autorelease ]; [ _internal unlock ]; return result;
但若是设置nonatomic时,属性的访问为非原子性访问。内存
总结: 须要全局访问的变量尽可能声明成属性来进行赋值,声明成成员变量没法保持引用计数的一致性从而致使崩溃,在内部访问数据时使用成员变量或属性都是能够的,在对属性进行赋值时,会调用属性的set方法,使引用计数加一从而保证内存的正确引用。get