我是Objective-C(和stackoverflow)的新手,我对有关属性的最佳实践略微转变。
我的理解是,当你完全使用属性时,可以通过释放它们来避免错误,然后立即设置为nil,以便后续消息也返回nil而不是异常。
[myProperty release],myProperty = nil;
然而,当涉及到'复制'和'保留'属性的dealloc是否有任何需要同时做?或做一个简单的
[myProperty发布] 剪了它?另外,我是否正确,我不需要在dealloc中发布'assign'属性?
谢谢!
答案 0 :(得分:17)
释放,但不要打扰设置为零。通过@synthesized setter设置为nil:
self.myProperty = nil
将作为重新分配的一部分释放旧值(尽管如评论中所述,可能有不必要的副作用),但只是将nil分配给您的成员变量:
myProperty = nil
不会。
[myProperty release]
就是你所需要的一切。
(你对“分配”属性是正确的。)
答案 1 :(得分:0)
虽然使用没有任何继承的方法也可以这样做 - 但如果你是你自己的,你可以(并且有)控制它。
问候
答案 2 :(得分:0)
@Dave DeLong:当执行对象的dealloc方法时,不再使用该对象。所有kvo观察员应该在那一刻被移除,否则将会减少。无论如何 - 即使观察者会看到对象仍然存在(至少部分地)的变化。
我认为被覆盖的访问者是正确的参数。但是,对于您自己的类,使用访问器可能仍然更简单。特别是在使用合成方法时,您知道语义但没有关于访问者的详细信息...