[iOS7的一些总结]、iOS中的内存管理

我们知道,为了更加方便地处理内存管理问题,将开发人员从繁琐的内存的分配和释放工作中解放出来而专注于产品和逻辑,iOS提供了一种有效的方法, 即自动引用计数ARC。采用了ARC之后,绝大部分内存管理的问题就不需要我们继续操心了。但是从另一个方面讲,这个方便的工具也助长了程序员的懒惰情 绪,很多新手和学生甚至连引用计数的含义都不清楚。的确,这部分内容相对比较难以理解,不过如果能深刻地领悟之后将会是未来学习和开发中的强大助推器。

、关于对象所有权的概念:

当一个所有者(可以是任意的objective-c对象)进行以下操作时,它就对某个对象拥有了所有权:创建或复制了某个对象,以及将对象保留使用。可能涉及到的函数有:

alloc; allocWithZone; copy; copyWithZone; mutableCopy; mutableCopyWithZone; retain;

如果某个所有者拥有某个对象的所有权,那么该所有者有义务在适当的时刻释放该对象:

release; autorelease;

在什么时候需要着重考虑对象所有权?例如,某个对象(对象A)是另一个对象(对象B)的成员,而且子对象(A)与某个外部对象有关(比如通过外部对象对子对象进行设置)。此时需要着重考虑子对象创建和释放的逻辑,防止出现提前释放、误释放和未释放等问题。

、dealloc方法

作用:在引用计数为0的时候由系统自动调用,释放当前对象并回收内存。通常重写该函数以实现手动施放该对象中手动分配的成员。需要注意的是,由于子类的某些实例继承自父类,因此在最后必须要调用父类的dealloc方法。

、点语法的内存管理

在定义属性property的时候通常会指定类型,如retain、assign等。主要考虑三个部分:

()赋值特性:assign——直接赋值(default);retain——保留对象,二者指向同一实例,引用计数+;copy——拷贝对象,引用计数不变(少数情况下等价于retain);

()读写性:readwrite——可读写(default),生成setter和getter方法;readonly——只生成getter方法;

()原子性:atomic——原子类(default),开启多线程保护;nonatomic——非原子类,不存在线程保护。

定义了property后,在使用点语法进行设置和读取成员变量的时候会自动根据定义的类型进行相应的内存操作。

、自动释放池autorelease pool

在一个自动释放池中创建的对象,可以被自动释放。NSObject类提供了autorelease消息,向某个对象发送autorelease就可以将该对象加入自动释放池。在自动释放池销毁的时候,会自动向池中的每一个对象发送一条release消息。

需要注意的一点是,自动释放池并不能保证每一个池中的对象都成功施放。因为如果池中的对象引用计数大于1,则由于自动释放池仅会发送一条release消息,因此该对象依然会存在。

总结 IOS 7 内存管理的更多相关文章

  1. 理解 iOS 的内存管理

    远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳 ...

  2. iOS ARC内存管理

    iOS的内存管理机制,只要是iOS开发者,不管多长的时间经验,都能说出来一点,但是要深入的理解.还是不简单的.随着ARC(自动管理内存)的流行.iOS开发者告别了手动管理内存的复杂工作.但是自动管理内 ...

  3. iOS之内存管理(ARC)

    iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存.本文主要讲讲Autorelease,Core Foundation对象在内存管理方 ...

  4. 说说iOS与内存管理(上)

    http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...

  5. iOS的内存管理和引用计数规则、Block的用法以及三种形式(stack、malloc、global)

    学习内容 iOS的内存管理和引用计数规则 内存管理的思考方式 自己生成的对象自己持有 非自己生成的对象自己也能持有 自己持有的对象不需要时释放 非自己持有的对象不能释放 ARC有效时,id类型和对象类 ...

  6. iOS - OC 内存管理

    1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...

  7. iOS的内存管理

    在Objective-C 这种面向对象的语言里,内存管理是个重要的概念.要想用一门语言写出内存使用效率高而且又没有bug的代码,就得掌握其内存管理模型的种种细节. 一旦理解了这些规则,你就会发现,其实 ...

  8. IOS ARC内存管理,提高效率避免内存泄露

    本文转载至 http://blog.csdn.net/allison162004/article/details/38756263 Cocoa内存管理机制 (1)当你使用new.alloc.copy方 ...

  9. 【iOS系列】-iOS中内存管理

    iOS中创建对象的步骤: 1,分配内存空间,存储对象 2,初始化成员变量 3,返回对象的指针地址 第一:非ARC机制: 1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对 ...

随机推荐

  1. Improved logging in Objective-C

    [Improved logging in Objective-C] Example of logging the current method and line number. Paste it in ...

  2. 文本读写vs二进制读写

    [文本读写vs二进制读写] 在学习C语言文件操作后,我们都会知道打开文件的函数是fopen,也知道它的第二个参数是 标志字符串.其中,如果字符串中出现'b',则表明是以打开二进制(binary)文件, ...

  3. c#动态加载dll文件

    1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置. using System; using System.Collections.Ge ...

  4. HDU题目分类

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058. ...

  5. java_web用户的自动登录模块的实现

    javaBean的代码 package bean; import java.io.Serializable; public class Admin implements Serializable{ / ...

  6. 关于favicon.ico的使用

    http://www.cnblogs.com/LoveJenny/archive/2012/05/22/2512683.html

  7. [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝

    一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...

  8. C# Hashtable 简述

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...

  9. 数据库 SQL :有关 NULL 值引发 TRUE、FALSE、UNKNOW 三值逻辑

    在 Java.C# 中,相信如果是 boolean 类型值,只有两种选择 true.false.然而,在 SQL 查询中,NULL 值的引入,使得新增了 UNKNOW ,因此,就产生了 TRUE.FA ...

  10. linux集群管理<转>

    云在根本上是由硬件和软件组成的,这些组件需要经常细心地维护.出现故障的硬件需要修理或更换:软件需要应用补丁.更新和升级:必须根据需求和潜在的安全威胁提前配置系统.应用程序开发人员可能觉得计算云很方便. ...