在线程“我如何管理内存”中,作者说“我不会在 init 和 dealloc 中使用完整的形式,因为它可能会触发 KVO 或有其他副作用。” 我没明白你的意思?
问问题
871 次
2 回答
1
我认为作者应该更加小心命名约定。
@property (nonatomic, retain) NSString *something;
应该综合到
@synthesize something = _something;
这样,您可以参考self.something
使用访问器方法或_something
使用支持该属性的 ivar。它不太容易出错。
关于你的问题。当您拥有访问器时,除了在该访问器方法中设置该属性(例如通知另一个对象或更新 UI)之外,您可能还在做其他事情。而且您可能不想在 init 或 dealloc 上执行此操作。这就是为什么您可能希望直接访问 ivar,但情况并非总是如此。
于 2013-04-11T12:09:46.793 回答
0
他指的是通过自我表示法访问您的@properties。合成属性时,会自动为您创建该变量的 getter 和 setter:
@property (nonatomic,strong) MyClass myVar;
@synthesize myVar = _myVar;
- (MyVar *)myVar
{
return _myVar;
}
- (void)setMyVar:(MyClass *)myVar
{
_myVar = myVar;
}
这些方法是在定义和/或合成属性时在幕后创建的(取决于 Xcode 版本)
所以当你这样做的时候
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
符号直接访问变量。
有关最佳实践等的更多信息,请参阅此答案,但这是一个有争议的问题:为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器?
于 2013-04-11T12:08:39.863 回答