覆盖“释放”或“释放”

哪个是最好的方法

在目标c中覆盖“release”或“dealloc”方法

为什么?

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

我只看到1个情况,需要重写释放方法 – 一种单例,它强制类实际上有一个单一的实例,无论你多less次调用alloc。

这种方式不仅覆盖release方法,而且还allowWithZone:retain ,'retainCount`等等(实现这种单例实际上并不常见)

哪个是最好的方法? 覆盖releasedealloc方法?

- dealloc ,绝对。 你不应该重写- release

为什么?

一,因为release做了一堆内部的东西。 二, 因为如果release被调用,并不意味着该对象被释放。

所以你会发布你的ivars或无意中你的财产。 当我们能够拥有世界和平时,谁想要一个丑陋的段落错误?

如果一个对象真的被释放, - dealloc将被调用。

如果你不使用ARC,你应该重写-[MyObject dealloc] dealloc方法来释放对象内的所有保留对象。 我从来没有发现我需要重写发布方法的情况。

如果你使用的是ARC,你通常可以避免重写-dealloc方法,除非你使用的东西ARC不会像sqlite指针那样释放。

不要重写任何与内存pipe理无关的东西 – 你什么时候不用,如果这些方法甚至被调用。

什么时候应该dealloc的例外

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