对象在完成生命期后,要调用dealloc方法,但具体何时执行,无法保证。
我们不应该自己调用dealloc方法,运行期系统会在适当的时候调用它。
我们能够通过人工观察保留与释放操作的位置,来预测此方法何时即将执行,但实际上,程序库会以开发者察觉不到的方式操作对象,从而使回收对象的真正时机和预期的不同。
在dealloc方法中做些什么:
- 释放对象所拥有的引用。
- 对象所拥有的非Objective-C也要释放。
- 把原理配置过的观测行为都清理掉
开销较大或系统内稀缺的资源则不在dealloc中释放引用,需要实现另外一个方法实现对资源的释放,如:文件描述符、套接字、大块内存等。原因:
- 保留稀缺资源到dealloc再释放时间较长。
- 系统并不能保证每个创建出来的对象的dealloc都会执行。
执行异步任务的方法、只能在正常状态下执行的方法都不应该在dealloc里调用,因为对象已处于正在回收的状态了。