所以如果我在iOS中(使用Objective C,不确定Swift是否相同),例如
@property (nonatomic, copy) NSString *aString;
然后在我的代码中的某些地方
// Simple ivar access in some method
_aString = anyStringOrNil;
// Self-> ivar access in some other method
self->_aString = anyStringOrNil;
我想知道使用一个或另一个
之间的区别答案 0 :(得分:0)
正如您发布的那样,这些是完全相同的。但是,直接访问伊塔尔和通过酒店之间存在差异。如果将字符串设置为:
self.aString = someString;
这将通过自动生成的setter,根据你的属性声明,它会复制someString。在使用可变字符串的情况下,这是优选的。你不希望字符串从你下面改变。在您使用的两个示例中,您直接将_aString的值设置为字符串引用,因此如果字符串是由其他人拥有的可变字符串,则它可能会在没有警告的情况下更改并导致意外结果。
通常更好的做法是通过setter(self.property = foo
)而不是直接访问ivar,因为属性的setter可能有一些你可能想要的行为并直接访问它绕过它。当然,有些情况下需要直接访问ivar,但最好通过该属性作为默认值。