总结 IOS 7 内存管理
[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 内存管理的更多相关文章
- 理解 iOS 的内存管理
远古时代的故事 那些经历过手工管理内存(MRC)时代的人们,一定对 iOS 开发中的内存管理记忆犹新.那个时候大约是 2010 年,国内 iOS 开发刚刚兴起,tinyfool 大叔的大名已经如雷贯耳 ...
- iOS ARC内存管理
iOS的内存管理机制,只要是iOS开发者,不管多长的时间经验,都能说出来一点,但是要深入的理解.还是不简单的.随着ARC(自动管理内存)的流行.iOS开发者告别了手动管理内存的复杂工作.但是自动管理内 ...
- iOS之内存管理(ARC)
iOS的内存管理,相信大家都不陌生,之前是使用的MRC,由开发人员手动来管理内存,后来使用了ARC,来由系统管理内存.本文主要讲讲Autorelease,Core Foundation对象在内存管理方 ...
- 说说iOS与内存管理(上)
http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...
- iOS的内存管理和引用计数规则、Block的用法以及三种形式(stack、malloc、global)
学习内容 iOS的内存管理和引用计数规则 内存管理的思考方式 自己生成的对象自己持有 非自己生成的对象自己也能持有 自己持有的对象不需要时释放 非自己持有的对象不能释放 ARC有效时,id类型和对象类 ...
- iOS - OC 内存管理
1.OC 基本内存管理模型 1.1 自动垃圾收集 在 OC 2.0 中,有一种称为垃圾收集的内存管理形式.通过垃圾收集,系统能够自动监测对象是否拥有其他的对象,当程序执行需要空间的时候,不再被引用的对 ...
- iOS的内存管理
在Objective-C 这种面向对象的语言里,内存管理是个重要的概念.要想用一门语言写出内存使用效率高而且又没有bug的代码,就得掌握其内存管理模型的种种细节. 一旦理解了这些规则,你就会发现,其实 ...
- IOS ARC内存管理,提高效率避免内存泄露
本文转载至 http://blog.csdn.net/allison162004/article/details/38756263 Cocoa内存管理机制 (1)当你使用new.alloc.copy方 ...
- 【iOS系列】-iOS中内存管理
iOS中创建对象的步骤: 1,分配内存空间,存储对象 2,初始化成员变量 3,返回对象的指针地址 第一:非ARC机制: 1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对 ...
随机推荐
- POJ-2785 4 Values whose Sum is 0(折半枚举 sort + 二分)
题目链接:http://poj.org/problem?id=2785 题意是给你4个数列.要从每个数列中各取一个数,使得四个数的sum为0,求出这样的组合的情况个数. 其中一个数列有多个相同的数字时 ...
- iOS多线程总结
1.不要同时开太多的线程(1~3条线程即可,不要超过5条) 2.线程概念 1> 主线程 : UI线程,显示.刷新UI界面,处理UI控件的事件 2> 子线程 : 后台线程,异步线程 3.不要 ...
- effective c++ (一)
条款01:把C++看作一个语言联邦 C++是一种多重范型编程语言,一个同时支持过程(procedural),面向对象(object-oriented),函数形式(functional),泛型形式(ge ...
- sql 分组后 组内排名
语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW ...
- HTML to DOM
Although you can now natively parse HTML using DOMParser and XMLHttpRequest, this is a new feature t ...
- 函数WideCharToMultiByte() 详解
函数原型: int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPWSTR lpWideCharStr, int cchWideChar, ...
- chrome浏览器下用jQuery的load函数来跨域加载页面,响应状态status为(canceled)是什么情况? JSON和JSONP,也许你会豁然开朗,含jQuery用例
http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 问题来源:http://q.cnblogs.com ...
- __declspec,__cdecl,__stdcall区别和作用
_cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的 顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要 ...
- EasyUI-在iframe里获取现阶段选中的tab的标题
在iframe里获取当前选中的tab的标题(easyui) var currTab =$$('#tabs').tabs('getSelected'); console.info(currTab.pan ...
- Android 获取控件相对于屏幕位置
// View宽,高 public int[] getLocation(View v) { int[] loc = new int[4]; int[] location = new int[2]; v ...