2013-04-11 79 views

回答

0

他指的是通过自我符号访问您的@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?

+2

这并不能解释为什么*在init/dealloc中使用属性访问器可能存在问题(这是OP要求的)。 – 2013-04-11 12:12:20

+0

虽然这是一个主观问题,所以提供更多背景可能会有所帮助。 – Tim 2013-04-11 12:33:57

1

我觉得作者应该更小心的命名约定。

@property (nonatomic, retain) NSString *something; 

应该综合成

@synthesize something = _something; 

这种方式,你可以参考self.something使用存取方法或者_something使用该备份该属性的伊娃。它不太容易出错。

而关于你的问题。当你有一个存取器时,除了在该存取器方法中设置该属性(如通知另一个对象或更新UI)之外,你可能还在做其他事情。你可能不想在init或dealloc上这样做。这就是为什么你可能想直接访问伊娃,但情况并非总是如此。

相关问题