我知道 @synthesize
-ing 变量会自动为我的 .h 文件中定义的 @property
创建访问器方法,并使用 = _variable
告诉编译器用于我的支持变量的名称,但它对我还有其他作用吗?
我几乎一直在使用类似的东西来分配和读取我的类变量
self.variableName = somethingElse
或
self.someLabel.text = self.someString
我可以(假设所有@synthesize语句都是正确的,等等)做类似的事情吗?
_variableName = somethingElse
我可以使用 _variable 而不是使用 self.variable 而不用担心吗?我应该在 dealloc
中使用 [_variablerelease]
还是 [self.variablerelease]
?
我仍然对 Objective-C/cocoa/iOS 开发的一些原因感到困惑。
最佳答案
@synthesize varible1
相当于 @synthesize variable1 = variable1
-- 这表示您为实例变量和属性指定了相同的名称。
当您说@synthesizevariable1=variable2
时,variable1
是属性的名称,variable2
是实例变量的名称。
使用上面的@synthesize
语句,如果你说:
self.variable1 = something;
然后,如果该属性具有“retain”属性,则对象 something
会被保留(并且variable1 中的任何旧对象都会被释放)。
但是如果你说:
variable2 = something;
然后不会发生保留/释放。这很可能会导致丢失对象错误。
至于dealloc
中的释放,你可以说:
[self.variable1 release];
或
[variable2 release];
尽管后者是首选。
你也可以说:
self.variable1 = nil;
这将释放变量并将其归零。
但请注意,前两种形式应该仅在dealloc
中使用。
关于objective-c - @synthesize variable = t_variable 到底有什么作用?是不是很有帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090764/