美文网首页
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方法的使用次数相等。

相关文章

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • iOS之从MRC到ARC内存管理详解

    概述 在iOS中开发中,我们或多或少都听说过内存管理。iOS的内存管理一般指的是OC对象的内存管理,因为OC对象分...

  • iOS五大块知识总结之内存管理

    1.1 管理的原因 只有OC对象才需要管理内存,非OC对象(如:char、int、folat)则不需要管理内存的本...

  • iOS 中堆和栈的区别以及冒泡排序

    在引入堆和栈之前,先要知道,iOS中的内存管理范围: OC对象需要进行内存管理,非oc对象不需要进行内存管理,比如...

  • OC的内存管理

    最近系统地复习了OC的内存管理,所以总结下. OC是通过引用计数(reference count)来管理内存.自...

  • OC关于在MRC模式下的内存管理学习

    内存管理 管理范围 任何继承NSObject的对象 只有OC对象才需要进行内存管理的本质原理 1.OC对象在堆中 ...

  • 《Effective Objective-C 2.0》读书笔记(

    第五章 内存管理 第29条:理解引用计数 OC 中有手动内存管理(MRC) 自动内存管理(ARC)手动内存管理需要...

网友评论

      本文标题:OC内存管理

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