如果我为已定义的属性指定属性,它对默认属性配置有什么影响吗?
例如,以下声明是相等的,因为atomic, readwrite and strong
默认设置
@property(atomic,readwrite,strong)NSString *name;
@property NSString *name;
如果我用 attribute 声明属性assign
,它会保留其他属性吗?
这两个陈述等价吗?
@property (assign) NSString* name;
@property (assign,atomic,readwrite,strong) NSString * name;
如果我更改一个默认属性,会发生什么情况,是否会将另一个属性保留为默认设置?这两个陈述等价吗?
@property (nonatomic,weak) NSString * name;
@property (nonatomic,weak,readwrite) NSString * name;
我问这个问题是因为当我仅使用属性设置属性时assign
,该strong
属性看起来不再应用,因为当我使用另一个变量设置它时,它不会保留引用。
Objective-C 属性的各种属性被分组为互斥的值集。您只能从每一组中选择一个值。
所以你不能创建一个既是 又是 的
assign
属性strong
。它只能是其中之一。从每个组中选取一个值不会影响任何其他组中的值。
对于引用类型(
NSString *
例如),默认值是原子的、可读写的和强的,正如您所说的。为一个值显式选择非默认值不会更改其他默认值。你问:
不会,因为一旦选择
assign
,strong
就不会被使用。附带说明一下,永远不要assign
与引用类型一起使用,除非您确实有充分且充分理解的理由这样做。换句话说,这些是相同的:
不过,再次强调,不要
assign
与引用类型一起使用。您询问以下是否等效:
是的,这些是相同的。我一直使用第一个,并且该属性也始终是可读写的。
我说过你只能从每一组中选择一个值。这实际上只是部分正确。在类的公共接口中,您可以将属性声明为只读。然后在该类的私有类扩展中,您可以将该属性重新声明为可读写。例如:
.h 文件:
.m 文件
这样做的作用是向类的用户公开一个只读属性,但允许类的私有实现也向该属性写入值。