覆盖“释放”或“释放”
哪个是最好的方法
在目标c中覆盖“release”或“dealloc”方法
为什么?
在非ARC的情况下,99%的情况下你不应该重写发布方法。
我只看到1个情况,需要重写释放方法 – 一种单例,它强制类实际上有一个单一的实例,无论你多less次调用alloc。
这种方式不仅覆盖release
方法,而且还allowWithZone:
, retain
,'retainCount`等等(实现这种单例实际上并不常见)
哪个是最好的方法? 覆盖
release
或dealloc
方法?
- dealloc
,绝对。 你不应该重写- release
。
为什么?
一,因为release
做了一堆内部的东西。 二, 因为如果release
被调用,并不意味着该对象被释放。
所以你会发布你的ivars或无意中你的财产。 当我们能够拥有世界和平时,谁想要一个丑陋的段落错误?
如果一个对象真的被释放, - dealloc
将被调用。
如果你不使用ARC,你应该重写-[MyObject dealloc]
dealloc方法来释放对象内的所有保留对象。 我从来没有发现我需要重写发布方法的情况。
如果你使用的是ARC,你通常可以避免重写-dealloc方法,除非你使用的东西ARC不会像sqlite指针那样释放。
不要重写任何与内存pipe理无关的东西 – 你什么时候不用,如果这些方法甚至被调用。
什么时候应该dealloc的例外 :
- 删除KVO /通知中心观察员
- 释放手动分配的内存(弧)/释放你的Ivars(非弧)