ARC

作者: 奕十八 | 来源:发表于2016-08-26 12:05 被阅读7次

    ARC

    • OC使用引用计数机制来管理内存,每次runloop完成一个循环的时候,都会检查对象的retainCount,如果retainCount为0,就释放
    • 内存管理的原则:
      • 只要还有人用这个对象,那么这个对象就不会被回收
      • 如果想使用这个对象,就让他的引用计数+1
      • 当不再使用某个对象的时候,就让它的引用计数-1
      • 谁创建谁release 谁retain 谁release
      • 总起来说就是有加就有减
      • alloc allocWithZone时,该对象引用计数加1
      • copy:如果时mutableCopy,则为深拷贝,会产生新的对象,并且新的对象的引用计数为1,如果时copy,则为浅拷贝,只是拷贝了原对象的地址,原对象引用计数+1
      • autorelease:把该对象加入自动释放池,当自动释放池释放时,其内所有的对象引用计数-1
      • 自动释放池何时被销毁?简单的看,是autoreleasse的}执行完之后。而实际情况是当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop中都加入了自动释放池的Push和pop,底层是通过Observer监听Runloop的状态,一旦监听到RunLoop即将进入睡眠等待状态,就释放自动释放池
      • 多次调用对象的autoreleasse方法会导致野指针异常
      • 注意:iOS中没有垃圾回收机制,autorelease只是延迟时间统一释放,而垃圾回收机制是每隔一段时间询问程序,看是否有指针指向对象,如果有就将它回收
      • 如何解决ARC机制下类的相互引用:
        • .h文件中使用@class关键字声明一个类
        • 两端不能都用强指针,一端用strong,一端用weak

    相关文章

      网友评论

          本文标题:ARC

          本文链接:https://www.haomeiwen.com/subject/qbfzsttx.html