明智而审慎地使用dealloc

dealloc会在对象的引用计数为0并且内存可被回收的情况下被自动调用。
一般不应该让dealloc来管理资源。
如果你非要用dealloc来管理资源的话,一定要注意以下问题:

  • 对象之间在销毁的时候往往存在依赖性,就是一个对象能否销毁取决于另一个对象都是被销毁,所以这个时候要注意控制对象被销毁的顺序。
  • 要防止稀缺资源的未回收。
    这不同于内存泄露,内存泄露是说一块内存谁也使用不了了。而稀缺资源的未回收说的是很多地方需要用到稀缺资源,假如其中一个地方在使用完稀缺资源以后没有释放,那么别的地方就使用不了了,造成了功能上的无效。前者针对的是内存,后者针对的是资源。
  • 自动释放池是一个神奇的地方,因为它可以被多线程访问。如果某个线程使用完的对象落入了自动释放池,但是我们并没有打算它被其他线程使用,可是实际上它却被其他线程给使用了,这就出现问题了,所以要好好设计程序。

dealloc的作用是回收内存,dealloc之前需要先把对象的引用计数降为0才能释放资源回收内存。
[super dealloc]是要写在最后一行的。
为啥呢?

  • 因为析构的顺序通常是先子类成分后父类成分,这正好与声明的顺序相反。
  • 子类成分是基于父类成分,很多时候如果先释放父类成分,子类成分就会变得残缺从而崩溃。
  • 各种语言机制就规定你要先释放子类成分,然后再释放父类成分。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,013评论 1 16
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,216评论 30 472
  • 29.理解引用计数 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数...
    Code_Ninja阅读 1,532评论 1 3
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 893评论 0 4
  • 回顾2017年,整体上感觉收益还是满满的,虽然有很多地方还是做的不够。 简书文字加上通往财富自由之路的留言,今年码...
    3cea39b597c0阅读 212评论 1 2