@synthesizevariables= _variable真的做什么? 这是非常有帮助的吗?

我得到@synthesize一个variables自动创build在我的.h文件中定义的= _variable的访问器方法,使用= _variable告诉编译器名称用于我的支持variables,但是它为我做了什么? 我几乎一直使用类似的东西分配和读取我的类variables

 self.variableName = somethingElse 

要么

 self.someLabel.text = self.someString 

我可以改为(假设所有@synthesize语句是正确的,等等)做类似的事情?

 _variableName = somethingElse 

而不是使用self.variable我可以去使用_variable,而不是担心它? 我应该在我的dealloc还是[self.variable release]

我仍然对Objective-C / cocoa / iOS开发的一些原因感到困惑。

@synthesize varible1相当于@synthesize variable1 = variable1 – 这就是说,你给的实例variables和属性相同的名称。

当你说@synthesize variable1 = variable2variable1是属性的名字, variable2是实例variables的名字。

用上面的@synthesize语句,如果你说:

 self.variable1 = something; 

那么,如果该属性具有“保留”属性,则该对象被保留(并且variables1中的任何旧对象被释放)。

但是如果你说:

 variable2 = something; 

那么没有保留/释放发生。 这很可能会导致一个丢失的对象错误。

至于释放dealloc ,你可以说

 [self.variable1 release]; 

要么

 [variable2 release]; 

虽然后者是首选。

你也可以说:

 self.variable1 = nil; 

这将释放variables和零。

但是请注意,前两种forms只能dealloc

这样做的原因是这样的。

假设你正在重写ARC中的访问器。 你这样写:

 - (void) setMyValue:(NSString *)myValue { _myValue = myValue; } 

如果你还没有做到:

 @synthesize myValue = _myValue; 

你将不得不重新命名进来的参数而不影响你的实例variables。

另外,正如所谓的“热舔”指出,如果你离开名为myValue的实例variables太容易直接使用它,而不是访问者,这意味着当你覆盖该访问器,它不会影响所有的代码应该。