我什么时候应该使用保留,分配,复制,非原子

时间:2012-05-08 08:16:02

标签: iphone objective-c cocoa-touch ios4

  

可能重复:
  @property and retain, assign, copy, nonatomic

有人可以向我提供有关属性的概述:retainassigncopynonatomic。 我是iPhone开发的新手,我不知道如何以及何时使用这些

提前致谢。

1 个答案:

答案 0 :(得分:4)

如果您使用自己的getter / setter,那么这些关键字没有多大意义,但如果您使用@ property / @ synthesize,那么您需要使用关键字。

  • 保留:在这种情况下,您得到的额外对象是该对象的保留计数对于每个保留增加1,如果您使用arc,则需要释放它。当您不使用时,使用Retain不希望在对象上设置值时释放该值。另外,retain会创建一个强引用,并且在释放所有强引用之前,不能释放对象。

  • 复制:复制只是保留的反向,因为它只提供要处理的对象的副本,并且复制的对象上的实际值不会反映在真实对象上。当setter参数可能是可变的时,应该使用复制访问器,但是如果没有警告就不能更改属性的内部状态。

  • 分配:分配通常用于非对象数据类型。

  • 非原子:非原子提供线程安全,而默认原子不提供,但原子的读/写是线程安全的,它使用对象级锁定来确保读/写的序列化。此外,无论其他线程同时执行什么,如果指定强,复制或保留并且不指定非原子,则始终完全检索或设置从getter返回的值或通过setter设置的值。然后在引用计数环境中,合成对象属性的get访问器使用锁并保留并自动释放返回的值。