标签:float 系统 结果 影响 内存管理 只读 Owner attribute nsstring
使用属性时还有一个问题要注意,就是其各种特质(attribute)设定也会影响编译器所生成的存取方法。比如下面这个属性就指定了三项特质:
1 @property (nonatomic, readwrite, copy) NSString *testFirstName;
属性可以拥有的特质分为四类:
在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicity)(在并发编程中,如果某操作具备整体性,也就是说,系统其他部分无法观察到其中间步骤所生成的临时结果,而只能看到操作前与操作后的结果,那么该操作就是“原子的”(atomic),或者说,该操作具备“原子性”(atomicity))。如果属性具备 nonatomic 特质,则不使用同步锁。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的”(atomic)),但是仍然可以在属性特质中写明这一点,编译器不会报错。若是自己定义存取方法,那么就应该遵从与属性特质相符的原子性。
属性用于封装数据,而数据则要有“具体的所有权语义”(concrete ownership semantic)。下面这一组特质仅会影响“设置方法” 。例如,用“设置方法”设定一个新值时,它是应该“保留”(retain)此值呢,还是只将其赋值给底层实例变量就好?编译器在合成存取方法时,要根据此特质来决定所生成的方法,那么就必须同有关属性所具备的特质相符。
END
标签:float 系统 结果 影响 内存管理 只读 Owner attribute nsstring
原文地址:http://www.cnblogs.com/chmhml/p/7030467.html