可能重复:
When to access properties with 'self'
In Objective-C on iOS, what is the (style) difference between “self.foo” and “foo” when using synthesized getters?
例如,我有@property
obj
和@synthesize
。那么我什么时候需要在我的实现类中使用[self.obj message]
vs [obj message]
。
答案 0 :(得分:2)
使用self
,将调用getter方法。因此,执行此getter方法中的任何其他逻辑。当实例变量通过其getter延迟加载时,这尤其有用。
我自己尝试在大多数时间使用self
。延迟加载只是一个例子,另一个问题是self
,子类可能会覆盖getter以获得不同的结果。
使用self
设置变量更有用。它会触发KVO通知并自动处理内存管理(当然正确实施)
答案 1 :(得分:1)
答案 2 :(得分:1)
当合成属性时,编译器会为您声明一个相关的ivar,默认情况下,ivar与属性名称相同。我建议始终使用self.obj来保持代码清洁,并避免一些潜在的错误。
我建议你遵循Apple的良好做法,@synthesize obj=_obj
,ivar将成为_obj
,当你打算使用属性时,这种风格迫使你直接写self.obj
,由于ivar为obj
,因此调用_obj
将会出错。
编辑:自动创建属性的ivar只在现代的Objective-C运行时,在iOS SDK 4.0和Mac OS X 10.6中是安全的。
让@synthesize在遗产中工作 运行时,你必须提供一个 具有相同名称的实例变量 和兼容的财产类型或 指定另一个现有实例 @synthesize语句中的变量。 使用现代运行时,如果不这样做 提供一个实例变量, 编译器为你添加一个。
答案 3 :(得分:1)
将来,请搜索网站。您经常会发现之前已经问过您提出的确切问题:
......等等。