[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. GLSL Notes

    [GLSL Notes] API of shader: glCreateShader(), glShaderSource(), glCompileShader(), glGetShadrInfoLog ...

  2. django 命名空间详解

    include(module[, namespace=None, app_name=None ]) include(pattern_list) include((pattern_list, app_n ...

  3. LeetCode292:Nim Game

    You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...

  4. C#下实现的半角转与全角的互转

    全角和半角的互转在C#下怎么实现呢? /// 转全角的函数(SBC case) /// ///任意字符串 ///全角字符串 /// ///全角空格为12288,半角空格为32 ///其他字符半角(33 ...

  5. Joel Spolsky对计算机学生的七大建议

    /*先来介绍下作者:Joel Spolsky,世界最具影响的程序员网志Joel on Software的主人,软件业一位旗帜鲜明的思想者,一位传统软件管理理念的挑战者.他创办的这个网站被程序员誉为“反 ...

  6. Unity3d:Unknown type 'System.Collections.Generic.CollectionDebuggerView'1

    问题描述:如图,在调试状态下说:Unknown type 'System.Collections.Generic.CollectionDebuggerView'1<ignore_js_op> ...

  7. 使用Visual Leak Detector检测内存泄漏[转]

      1.初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题 ...

  8. easyui combobox筛选(拼音)

    1.combobox本身的筛选 $('#cc').combobox({ filter: function(q, row){ var opts = $(this).combobox('options') ...

  9. A debugger is already attached

    Today is the last day that all the laptops of winXP OS should be upgrade to WIN7. After updated. whe ...

  10. 15 Examples To Master Linux Command Line History

    When you are using Linux command line frequently, using the history effectively can be a major produ ...