0

可能重复:
@property 和保留、分配、复制、非原子

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

提前致谢。

4

1 回答 1

4

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

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

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

  • 赋值:赋值通常用于非对象数据类型。

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

于 2012-05-08T08:48:20.493 回答