dealloc方法是什么样的?
对象在经历其生命期后,最终会为系统所回收,这时就要执行dealloc方法了。在每个对象的生命期内,此方法仅执行一次,也就是当引用计数降为0的时候。然而具体何时执行,则无法保证。
程序库会以开发者察觉不到的方式操作对象,从而使回收对象的真正实际和预期不同。你绝不应该自己调用dealloc方法。运行期系统会在适当的时候调用它。一旦调用过dealloc之后,对象就不再有效了,后续方法调用都是无效的。
在dealloc方法中应该做些什么?
主要就是释放对象所拥有的引用,ARC对此作了优化。但是对于其他非Objective-C的对象需要手动进行释放。
还有就是把原来配置过的观测行为都清理掉。
不应该在dealloc中做什么?
1、虽说应该于dealloc中释放引用,但是开销较大或系统内稀缺的资源则不在此列。比如:文件描述符、套接字、大块内存等。
因为不能指望dealloc方法必定会在某个特定的时机调用,有一些无法预料的东西可能也持有此对象。在这种情况下,如果非要等到系统调用dealloc方法时才释放,那么保留这些稀缺资源的时间就有些过长了。
通常的做法是,实现另外一个方法,当应用程序用完资源对象后,就调用此方法释放资源。
2、不要在里面随便调用其他方法。无论在dealloc中调用什么方法都不太应该,因为对象此时”已近尾声“,如果在这里所调用的方法又要异步执行某些任务,或是又要继续调用他们自己的某些方法,那么等到那些任务执行完毕时,系统已经把当前这个待回收的对象彻底摧毁了。
3、不要调用属性的存取方法,因为有人可能会覆写这些方法,并于其中做一些无法在回收阶段安全执行的操作。。此外,属性可能正处于”键值观察“机制的监控之下。