dealloc中的属性:release然后设置为nil?或者简单地发布

时间:2010-08-04 02:43:24

标签: objective-c

我是Objective-C(和stackoverflow)的新手,我对有关属性的最佳实践略微转变。

我的理解是,当你完全使用属性时,可以通过释放它们来避免错误,然后立即设置为nil,以便后续消息也返回nil而不是异常。

  

[myProperty release],myProperty = nil;

然而,当涉及到'复制'和'保留'属性的dealloc是否有任何需要同时做?或做一个简单的

  

[myProperty发布]   剪了它?另外,我是否正确,我不需要在dealloc中发布'assign'属性?

谢谢!

3 个答案:

答案 0 :(得分:17)

释放,但不要打扰设置为零。通过@synthesized setter设置为nil:

self.myProperty = nil

将作为重新分配的一部分释放旧值(尽管如评论中所述,可能有不必要的副作用),但只是将nil分配给您的成员变量:

myProperty = nil

不会。

[myProperty release]

就是你所需要的一切。

(你对“分配”属性是正确的。)

答案 1 :(得分:0)

@Dave DeLong和JeremyP:我想我们可以说“使用继承的消息(直接或间接由一个人调用某些部分来自super)”构建一个对象(通过init ...,new ...或copy ...)就像如果地下室已经存在,那么在没有人确定的情况下建造房屋并将屋顶放在房屋上。并且这样做虽然dealloc可能相当于拆除那个房子,从打倒基础墙开始,不确定是否在其酒窖内“。

虽然使用没有任何继承的方法也可以这样做 - 但如果你是你自己的,你可以(并且有)控制它。

问候

答案 2 :(得分:0)

@Dave DeLong:当执行对象的dealloc方法时,不再使用该对象。所有kvo观察员应该在那一刻被移除,否则将会减少。无论如何 - 即使观察者会看到对象仍然存在(至少部分地)的变化。

我认为被覆盖的访问者是正确的参数。但是,对于您自己的类,使用访问器可能仍然更简单。特别是在使用合成方法时,您知道语义但没有关于访问者的详细信息...