覆盖“释放”或“dealloc”

时间:2012-11-26 10:37:05

标签: objective-c ios

哪种方法最好

在目标c中覆盖“释放”或“dealloc”方法?

为什么?

4 个答案:

答案 0 :(得分:3)

  

哪种方法最好?是否覆盖了releasedealloc方法?

绝对是

- dealloc。您永远不应该覆盖- release

  

为什么?

一,因为release做了很多内部事情。二,因为如果调用release意味着该对象被解除分配。

因此,您将意外释放您的ivars或将您的属性归零。当我们能够拥有世界和平时,谁想要一个丑陋的段落?

如果某个对象确实已取消分配,则会调用- dealloc

答案 1 :(得分:3)

在非ARC下,99%的情况下你不应该覆盖发布方法。

我只看到了一个需要覆盖release方法的情况 - 一种单例,无论你多少次调用alloc,它都会强制该类实际有1个单例。

这样不仅会覆盖release方法,还会覆盖allowWithZone:retain,'retainCount`等等。(实现这种单例实际上并不常见)< / p>

答案 2 :(得分:0)

如果您不使用ARC,则应覆盖-[MyObject dealloc] dealloc方法以释放对象内的所有保留对象。我从未发现需要覆盖释放方法的情况。

如果你正在使用ARC,你通常可以避免覆盖-dealloc方法,除非你使用ARC不会像sqlite指针那样释放任何东西。

答案 3 :(得分:0)

不要覆盖任何与内存管理无关的内容 - 你不会在何时以及是否会调用这些方法。

你应该dealloc的

例外

  • 删除KVO /通知中心观察员
  • 解除分配手动分配的内存(弧)/释放您的ivars(非弧)