Objective-C 属性



Object-C属性


@property (retain,nonatomic)UILabel titleLabel;  

objective-C中添加属性之前,通常会定义一些方法用于设置和检索类的实例变量的值。这些方法称为访问方法和修改方法(或称为获取方法和设置方法)。  


属性的点表示法:

text =  [_titleLabeltext];

    text = _titleLabel.text;  

就编译器而言,这两条语句是完全相同的,点表示法同样适用于修改方法,如下:

    [_titleLabelsetText:@"123"];

    _titleLabel.text =@"123";



在声明中,@property关键字后面紧跟着一些可选属性(位于圆括号内),它们进一步定义编译器将如何创建访问方法和修改方法。


(1)retain: 通知编译器向分配给此属性的对象发生一个保留(retain)消息。这将确保属性底层的实例变量在使用过程中不会从内存清除。这是必不可少的,默认行为(assign)需要与垃圾收集一起使用。如果定义的一个属性是对象(与int等原始数据类型相反),则通常在可选属性中指定retain。

为int、float或其他原始数据类型声明属性时,不需要指定任何可选属性。

(2)nonatomic: 将更改访问方法和修改方法的生成方式。在默认情况下,这些方法在创建时会具备另外一些代码,用于帮助你编写多线程程序。这些额外的开销虽然较小,但是对于声明指向用户界面对象的指针没有必要,因此我们通过声明nonatomic来节省一些开销。一般规则,大多数情况下,都将指定nonatomic属性。

(3)assign: 用于int、float等原始数据类型,(此属性为默认值)



iOS5新功能ARC(Automatic Reference Counting),新的关键字: strong,weak,unsafe_unretained 

(4)strong:于retain类似,引用计数自动+1,  (owning)

(5)weak: 用weak修饰,一旦内存被释放,指针将都指向nil,可以防止野指针。(non-owning) 如: Delegate, IBOutlet一般用weak

(6)copy: 建立一个索引计数为1的对象,释放旧的对象。此属性仅用于对象类型,它必须实现NSCopying协议, 如: NSString,Block

(7)unsafe_unretained: 与weak有点类似,但是它是unsafe的,一旦内存释放,容易造成野指针闪退, 尽量少用unsafe_unretained

copy与retain的区别: 

1)retain是指针拷贝,copy是内容拷贝; retain的set方法是浅复制,copy的set方法是深复制。

2)建立一个索引计数为1的对象,然后释放旧对象,对NSString。它指出,在赋值时使用传入值的一份拷贝。copy工作由copy方法执行,此属性只对那些实现了NSCopying协议的对象类型有效 。

3)释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1。对其他NSObject和其子类。指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。



以上为常用来声明属性,__strong, __weak, __unsafe_unretained, __autoreleasing,常用来声明临时变量


(8)__block: ARC与MRC模式下都可用,可以修饰对象,也可修饰基本数据类型。

(9)__weak: 只能在ARC模式下使用,只能修饰对象,不能修饰基本数据类型(int等)。

(10)__block: 对象可以在block中改变值。




参考:[iPhone 开发基础教程] 

  http://www.cnblogs.com/langtianya/p/3691035.html

  http://blog.sina.com.cn/s/blog_4ac45c260102w3a5.html

  http://www.jianshu.com/p/c1d609d1569b










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值