当前位置:编程学习 > wap >>

objective-c中的属性

property中的声明列表已分类为以下几种:

1, 声明属性的访问方法:

getter=getterName
setter=setterName
声明访问属性的设置与获取方法名。
2,声明属性写操作权限:

readwrite
声明此属性为读写属性,即可以访问设置方法(setter),也可以访问获取方法(getter),与readonly互斥。
readonly
声明此属性为只读属性,只能访问此属性对应的获取方法(getter),与readwrite互斥。
3,声明写方法的实现:

assign
声明在setter方法中,采用直接赋值来实现设值操作。如:

 1 -(void)setName:(NSString*)_name{ 

2      name = _name; 

3 }


retain

声明在setter方法中,需要对设过来的值进行retain 加1操作。如:


 1 -(void)setName:(NSString*)_name{ 

2      //首先判断是否与旧对象一致,如果不一致进行赋值。 

3      //因为如果是一个对象的话,进行if内的代码会造成一个极端的情况:当此name的retain为1时,使此次的set操作让实例name提前释放,而达不到赋值目的。 

4      if ( name != _name){ 

5           [name release]; 

6           name = [_name retain]; 

7      } 

8 }


copy
调用此实例的copy方法,设置克隆后的对象。实现参考retain。
4,访问方法的原子性:

nonatomic
在默认的情况下,通过synthesized 实现的 setter与getter 都是原子性访问的。多线程同时访问时,保障访问方法同时只被访问一个线程访问,如:

 1 [ _internal lock ]; // lock using an object-level lock 

2 id result = [ [ value retain ] autorelease ]; 

3 [ _internal unlock ]; 

4 return result;


但如果设置nonatomic时,属性的访问为非原子性访问。

总结: 需要全局访问的变量尽量声明成属性来进行赋值,声明成成员变量无法保持引用计数的一致性从而导致崩溃,在内部访问数据时使用成员变量或属性都是可以的,在对属性进行赋值时,会调用属性的set方法,使引用计数加一从而保证内存的正确引用。

 


补充:移动开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,