objective-c中的属性

来源:未知 责任编辑:智问网络 发表时间:2013-10-07 00:58 点击:

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方法,使引用计数加一从而保证内存的正确引用。

 


    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • cocos2d-x学习笔记(19)--label 、label atlas
    • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
    • Cocos2d-x学习(一):HelloWorld
    • cocos2dx在xcode下开发,编译到android上(2)
    • cocos2d 设置屏幕默认方向
    • Cocos2d-x 2.0 之 Actions “三板斧” 之一
    • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
    • cocos2d-x学习笔记(18)--游戏打包(windows平台)
    • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1