Objective-C中的dealloc应该怎么用?

dealloc方法是什么样的?

对象在经历其生命期后,最终会为系统所回收,这时就要执行dealloc方法了。在每个对象的生命期内,此方法仅执行一次,也就是当引用计数降为0的时候。然而具体何时执行,则无法保证。

程序库会以开发者察觉不到的方式操作对象,从而使回收对象的真正实际和预期不同。你绝不应该自己调用dealloc方法。运行期系统会在适当的时候调用它。一旦调用过dealloc之后,对象就不再有效了,后续方法调用都是无效的。

在dealloc方法中应该做些什么?

主要就是释放对象所拥有的引用,ARC对此作了优化。但是对于其他非Objective-C的对象需要手动进行释放。

还有就是把原来配置过的观测行为都清理掉。

不应该在dealloc中做什么?

1、虽说应该于dealloc中释放引用,但是开销较大或系统内稀缺的资源则不在此列。比如:文件描述符、套接字、大块内存等。

因为不能指望dealloc方法必定会在某个特定的时机调用,有一些无法预料的东西可能也持有此对象。在这种情况下,如果非要等到系统调用dealloc方法时才释放,那么保留这些稀缺资源的时间就有些过长了。

通常的做法是,实现另外一个方法,当应用程序用完资源对象后,就调用此方法释放资源。

2、不要在里面随便调用其他方法。无论在dealloc中调用什么方法都不太应该,因为对象此时”已近尾声“,如果在这里所调用的方法又要异步执行某些任务,或是又要继续调用他们自己的某些方法,那么等到那些任务执行完毕时,系统已经把当前这个待回收的对象彻底摧毁了。

3、不要调用属性的存取方法,因为有人可能会覆写这些方法,并于其中做一些无法在回收阶段安全执行的操作。。此外,属性可能正处于”键值观察“机制的监控之下。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Win_77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值