哪种方法最好
在目标c中覆盖“释放”或“dealloc”方法?
为什么?
答案 0 :(得分:3)
绝对是哪种方法最好?是否覆盖了
release
或dealloc
方法?
- 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的例外: