美文网首页
自动释放池(autoreleasePool)

自动释放池(autoreleasePool)

作者: 没能唱给你的歌曲 | 来源:发表于2016-04-26 10:25 被阅读113次
    • 自动释放池是什么

    当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。 1. ojc-c 是通过一种"referringcounting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.2. NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的. 3. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一.


    • 自动释放池底层实现

    自动释放池以栈的形式实现:当你创建一个新的自动释放池时,它将被添加到栈顶。当一个对象收到发送autorelease消息时,它被添加到当前线程的处于栈顶的自动释放池中,当自动释放池被回收时,它们从栈中被删除,并且会给池子里面所有的对象都会做一次release操作.


    • 代码演示(减少内存消耗)

    图:创建一个自动释放池,创建20个Person对象,将对象加入自动释放池,如果不加循环,手动释放,那么要等20个Person对象创建完毕后才全部释放,加入循环手动释放后,每5次就手动释放一次,大大的减少了内存的消耗,提高效率


    Wyman

    相关文章

      网友评论

          本文标题:自动释放池(autoreleasePool)

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