我想在没有ivar的情况下声明@property。如果我使用strong,weak或assign声明@property会有什么不同吗?
答案 0 :(得分:2)
@property
声明定义了与属性用户的合同。例如,如果它被声明为weak
,则属性的用户知道不会保留传递的对象。
无论该财产是否由伊瓦尔支持,该合同都应该是真实的。
在您的情况下,该属性应为strong
,weak
或assign
,具体取决于您的财产实施以及您希望为该财产提供的合同。
答案 1 :(得分:0)
取决于该属性的类型。例如,对于像NSInteger这样的原始类型,您无法使用strong
或weak
属性声明属性。 Xcode会显示错误。
所以这些声明无效:
@property (nonatomic, strong) NSInteger max;
@property (nonatomic, weak) NSInteger max;
@property (nonatomic, copy) NSInteger max;
因为strong
,weak
和copy
是对象类型的属性,NSInteger
不是对象类型。它是原始类型。因此,以下声明有效:
@property (nonatomic, assign) NSInteger max;
属性assign
,weak
,strong
,copy
和unsafe_unretained
指定由属性支持的ivar的内存管理规则。因此,如果您不打算为属性创建ivar(假设您想提供自己的getter / setter并且属性不会存储任何值),那么您指定的属性并不重要。但正如我上面提到的,你无法为基本类型指定对象类型的属性。