美文网首页
OC内存管理

OC内存管理

作者: 执着的小蛋挞 | 来源:发表于2016-11-14 16:12 被阅读8次

    为什么要进行内存管理?

    答:因为系统可供程序使用的资源都是有限的,这些西苑包括内存,打开文件数量,以及网络连接等。程序运行的时候,程序会一直占用资源,不进行清理,资源将会耗尽,程序将可能崩溃.

    内存管理机制?

    cocoa采用了一种称为引用计数器的技术。每个对象都有和他相关联的整数,当某段代码需要访问一个对象时,该代码将该对象的引用计数器的值加1,当这段代码结束时,讲该对象的引用计数器减一,表示他不再访问这个对象,当引用计数器的值为0时,将不再有代码访问该对象,对象被销毁,其占用的内存被系统收回。

    1.当使用alloc 、new或者通过copy消息创建一个对象时,对象的引用计数器的值为1,要增加对象的引用计数器的值,可以给对象发送一条retain消息,要减少对象的引用计数器值可以给对象发送一条release消息。

    2.当一个对象因为引用计数器为0即将被销毁时间,OC自动向对象发送一条dealloc消息,可以在自己的对象中重写 dealloc的方法,不能直接调用。

    自动释放池(NSAutoreleasePool)

    是一个存放实体的集合,这些实体可能是对象,能够被自动释放。

    NSObject类提供了一个autorelease的方法,该方法预先设定了一条在将来某个时间会发送的release消息,其返回值是接受消息的对象。当自动释放池被销毁的时候,会向该池中的多有对象发送release消息。

    自动释放池销毁时间

    创建一个自动释放池,该池自动成为活动的池,释放该池时,其引用计数器为0,该池被销毁,在销毁过程中,该池子释放所有包含的对象。

    内存管理规则

    1.当你使用new,alloc或者copy创建一个对象时,该对象的引用计数器值为1,当你不再使用这个对象时,你要负责向该对象发送一条release或者autorelease消息。这样,对象将在其使用结束时被销毁。

    2.当你通过任何一个其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理,如果打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它。

    3.如果你保留了某个对象,你需要释放或自动释放对象,必须保持retain和release方法的使用次数相等。

    相关文章

      网友评论

          本文标题:OC内存管理

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