@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 = variable2
, variable1
是属性的名字, 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太容易直接使用它,而不是访问者,这意味着当你覆盖该访问器,它不会影响所有的代码应该。