何时在属性声明中使用“assign”或“retain”?

时间:2013-10-21 13:46:33

标签: ios objective-c

当我在iOS中为应用程序创建属性时,何时应该使用“assign”?我什么时候应该使用“保留”?

一方是否有任何好处?

2 个答案:

答案 0 :(得分:7)

Assign通常用于基本类型,编译器将创建setter,以便完成所有操作是一个简单的赋值操作。

尽管使用'retain'(现在称为带有ARC的“strong”)限定符在属性上设置值会导致后备实例变量取得所设置对象的所有权(换句话说保留)。

对于对象,如果您不想按照描述获取所有权并且您正在使用ARC,那么您很可能希望使用“弱”限定符而不是“赋值”。

答案 1 :(得分:3)

如果您使用ARC,则无需使用retain,因为您没有手动管理内存。

保留:如果您不使用ARC,则需要手动管理应用程序的内存。在这种情况下,如果对一个变量使用retain,则将计数递增1。然后,计数需要达到0才能被解除分配。

分配:调用assign属性的getter时,它返回对实际数据的引用。通常,当您具有基本类型的属性时,可以使用此属性。

Strong:替换retain属性,作为Objective-C自动引用计数(ARC)的一部分。在非ARC代码中,它只是retain的同义词。您用于要保留引用的对象。另一方面,我们很弱:

@property (nonatomic, strong) UIColor *myColor
@property (nonatomic, assign) BOOL myBOOL

无论如何,这个链接非常有用,并且比这里更好地解释了。 Objective-C declared @property attributes (nonatomic, copy, strong, weak)