首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写"release“或"dealloc”

重写"release“或"dealloc”
EN

Stack Overflow用户
提问于 2012-11-26 18:37:05
回答 4查看 807关注 0票数 0

哪种方法是最好的?

是否覆盖目标c中的"release“或"dealloc”方法?

为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-26 18:54:35

在非ARC模式下,99%的情况下不应覆盖release方法。

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-11-26 18:41:23

哪种方法是最好的?重写releasedealloc方法?

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

为什么?

其一,因为release做了一堆内部的事情。第二,因为如果调用release,并不意味着对象被释放。

因此,您可能会意外地释放您的ivars或将您的属性置为空。当我们可以拥有世界和平的时候,谁会想要一个丑陋的段错误呢?

如果一个对象真的被释放了,就会调用- dealloc

票数 3
EN

Stack Overflow用户

发布于 2012-11-26 18:38:18

如果不使用ARC,则应重写-[MyObject dealloc] dealloc方法以释放对象中保留的所有对象。我从来没有发现过需要覆盖release方法的情况。

如果你使用的是ARC,你通常可以避免重写-dealloc方法,除非你使用的是任何ARC不能释放的东西,比如sqlite指针之类的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13563050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档