dealloc会在对象的引用计数为0并且内存可被回收的情况下被自动调用。
一般不应该让dealloc来管理资源。
如果你非要用dealloc来管理资源的话,一定要注意以下问题:
- 对象之间在销毁的时候往往存在依赖性,就是一个对象能否销毁取决于另一个对象都是被销毁,所以这个时候要注意控制对象被销毁的顺序。
- 要防止稀缺资源的未回收。
这不同于内存泄露,内存泄露是说一块内存谁也使用不了了。而稀缺资源的未回收说的是很多地方需要用到稀缺资源,假如其中一个地方在使用完稀缺资源以后没有释放,那么别的地方就使用不了了,造成了功能上的无效。前者针对的是内存,后者针对的是资源。 - 自动释放池是一个神奇的地方,因为它可以被多线程访问。如果某个线程使用完的对象落入了自动释放池,但是我们并没有打算它被其他线程使用,可是实际上它却被其他线程给使用了,这就出现问题了,所以要好好设计程序。
dealloc的作用是回收内存,dealloc之前需要先把对象的引用计数降为0才能释放资源回收内存。
[super dealloc]是要写在最后一行的。
为啥呢?
- 因为析构的顺序通常是先子类成分后父类成分,这正好与声明的顺序相反。
- 子类成分是基于父类成分,很多时候如果先释放父类成分,子类成分就会变得残缺从而崩溃。
- 各种语言机制就规定你要先释放子类成分,然后再释放父类成分。