在线程“我如何管理内存”中,作者说:“尽管我在init和dealloc中不使用完整的表单,因为它可能触发KVO或产生其他副作用。” 我不明白你的意思?为什么不使用init和dealloc方法中的存取方法?
来源这里http://inessential.com/2010/06/28/how_i_manage_memory
在线程“我如何管理内存”中,作者说:“尽管我在init和dealloc中不使用完整的表单,因为它可能触发KVO或产生其他副作用。” 我不明白你的意思?为什么不使用init和dealloc方法中的存取方法?
来源这里http://inessential.com/2010/06/28/how_i_manage_memory
他指的是通过自我符号访问您的@properties。 (取决于Xcode的版本)
用于在幕后被创建@property (nonatomic,strong) MyClass myVar;
@synthesize myVar = _myVar;
- (MyVar *)myVar
{
return _myVar;
}
- (void)setMyVar:(MyClass *)myVar
{
_myVar = myVar;
}
这些方法,当属性被定义和/或合成的:当合成的性质,该变量的getter和setter自动为所创建
所以当你
self.myVar = 5;
你实际上是在做[self setMyVar:5];
然而,有可能直接访问变量,并通过使用下面的符号绕过二传手
_myVar = 5;
例子:
@property (nonatomic,strong) MyClass myVar;
@synthesize myVar = _myVar;
- (void)someMethod
{
// All do the same thing
self.myVar = 5;
[self setMyVar:5];
_myVar = 5;
}
这篇文章的作者是建议您不要在的dealloc和init中使用getter和setter方法,但直接使用_myVar
表示法访问该变量。
看到这个答案的有关最佳实践等进一步的信息,但它是一个值得商榷的问题:Why shouldn't I use Objective C 2.0 accessors in init/dealloc?
这并不能解释为什么*在init/dealloc中使用属性访问器可能存在问题(这是OP要求的)。 – 2013-04-11 12:12:20
虽然这是一个主观问题,所以提供更多背景可能会有所帮助。 – Tim 2013-04-11 12:33:57
我觉得作者应该更小心的命名约定。
@property (nonatomic, retain) NSString *something;
应该综合成
@synthesize something = _something;
这种方式,你可以参考self.something
使用存取方法或者_something
使用该备份该属性的伊娃。它不太容易出错。
而关于你的问题。当你有一个存取器时,除了在该存取器方法中设置该属性(如通知另一个对象或更新UI)之外,你可能还在做其他事情。你可能不想在init或dealloc上这样做。这就是为什么你可能想直接访问伊娃,但情况并非总是如此。
我认为你正在对来自不同来源的obj-c进行一些研究...... :) – 2013-04-11 12:18:09