哪种方法是最好的?
是否覆盖目标c中的"release“或"dealloc”方法?
为什么?
发布于 2012-11-26 18:54:35
在非ARC模式下,99%的情况下不应覆盖release方法。
我只看到过一种需要重写release方法的情况--一种单例,无论你调用alloc多少次,它都会强制类只有一个实例。
这种方式不仅覆盖了release方法,还覆盖了allowWithZone:、retain、'retainCount`‘等(实现这种单例实际上并不常见)。
发布于 2012-11-26 18:41:23
哪种方法是最好的?重写
release或dealloc方法?
当然是- dealloc。您永远不应该覆盖- release。
为什么?
其一,因为release做了一堆内部的事情。第二,因为如果调用release,并不意味着对象被释放。
因此,您可能会意外地释放您的ivars或将您的属性置为空。当我们可以拥有世界和平的时候,谁会想要一个丑陋的段错误呢?
如果一个对象真的被释放了,就会调用- dealloc。
发布于 2012-11-26 18:38:18
如果不使用ARC,则应重写-[MyObject dealloc] dealloc方法以释放对象中保留的所有对象。我从来没有发现过需要覆盖release方法的情况。
如果你使用的是ARC,你通常可以避免重写-dealloc方法,除非你使用的是任何ARC不能释放的东西,比如sqlite指针之类的。
https://stackoverflow.com/questions/13563050
复制相似问题