如果@property没有ivar,强,弱和分配有什么区别?

时间:2016-02-11 12:02:52

标签: objective-c

我想在没有ivar的情况下声明@property。如果我使用strong,weak或assign声明@property会有什么不同吗?

2 个答案:

答案 0 :(得分:2)

@property声明定义了与属性用户的合同。例如,如果它被声明为weak,则属性的用户知道不会保留传递的对象。

无论该财产是否由伊瓦尔支持,该合同都应该是真实的。

在您的情况下,该属性应为strongweakassign,具体取决于您的财产实施以及您希望为该财产提供的合同。

答案 1 :(得分:0)

取决于该属性的类型。例如,对于像NSInteger这样的原始类型,您无法使用strongweak属性声明属性。 Xcode会显示错误。 所以这些声明无效:

@property (nonatomic, strong) NSInteger max;
@property (nonatomic, weak) NSInteger max; 
@property (nonatomic, copy) NSInteger max;

因为strongweakcopy是对象类型的属性,NSInteger不是对象类型。它是原始类型。因此,以下声明有效:

@property (nonatomic, assign) NSInteger max;

属性assignweakstrongcopyunsafe_unretained指定由属性支持的ivar的内存管理规则。因此,如果您不打算为属性创建ivar(假设您想提供自己的getter / setter并且属性不会存储任何值),那么您指定的属性并不重要。但正如我上面提到的,你无法为基本类型指定对象类型的属性。