iOS开发--漫谈内存管理(一)
1、MRC与ARC
苹果提供两种内存管理机制:一种是MRC(manual reference count),即手动引用计数;还有一种是ARC(auto reference count)。即自己主动引用计数。
手动引用计数,顾名思义。须要程序猿主动调用retain、release等方法来管理内存。而自己主动引用计数方式,则是编译器在编译阶段把内存管理代码自己主动插入在须要手动调用的地方。这样就把程序猿从复杂的内存管理工作中解放出来,将很多其它精力放在实现详细的业务逻辑上。须要注意的是。ARC要在xcode4.2或者以上版本号、LLVM编译器3.0版本号下才干使用。
2、引用计算的实现方式
一种是GNUStep的实现方式:对象生成的时候,在对象的头部加入retained属性。表示该对象的引用计数,retain方法调用时retained加1,release方法被调用时,retained减1。当retained计数为0时。释放该对象。
一种是苹果的实现方式:引用计数表,表的大概形式{对象A的引用计数:对象A的内存地址。对象B的引用计数:对象B的内存地址。..... ,对象N的引用计数:对象N的内存地址}。
3、内存管理的思考方式
a、自己生成的对象,自己持有
id obj = [[NSObject alloc] init]; //此时,对象被生成,而且obj持有该对象。 该系列方法包含:alloc、new、copy和mutableCopy
b、非自己生成的对象,自己也能持有
id obj = [NSMutableArrray array];//对象被生成,且obj指向该对象。可是obj并不持有该对象,须要调用[obj retain]才干真正持有
c、不再须要自己持有的对象时释放
d、非自己持有的对象无法释放
新手可能非常难注意并理解第二条规则。它是怎样做到的呢,实现方式大概例如以下:
- (id) object
{
//对象生成。而且obj持有该对象
id obj = [[NSObject alloc] init]; //取得对象存在,但自己不持有该对象
[obj autorelease]; return obj;
}
4、关于autorelease
autorelease使用对象在超出制定的生存范围时可以自己主动并正确释放,类似于c语言中的自己主动变量。autorelease的典型使用方法例如以下:
NSAutoReleasePool *pool = [[NSAutoReleasePool] alloc init];
id obj = [[NSObject alloc] init];
[obj autorelease];
[pool drain]; //pool对象废弃时。[obj release]方法自己主动被调用
PS:文章大部分思想摘自《Objective-C高级编程》一书,权当个人读书总结吧。
iOS开发--漫谈内存管理(一)的更多相关文章
- IOS开发的内存管理
关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...
- IOS开发小记-内存管理
关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...
- [转载]对iOS开发中内存管理的一点总结与理解
对iOS开发中内存管理的一点总结与理解 做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作 ...
- iOS开发ARC内存管理技术要点
本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...
- IOS开发之内存管理--dealloc该写些什么
在非ARC开发环境中,dealloc是类释放前,清理内存的最后机会.到底那些变量和属性该释放呢,一些特殊的类(nstimer,observer)该怎么释放.需要注意的是不释放会引起内存泄露,过度释放也 ...
- (转)iOS开发ARC内存管理技术要点
转自:http://www.cnblogs.com/flyFreeZn/p/4264220.html 本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automati ...
- iOS开发ARC内存管理
本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...
- iOS夯实:内存管理
iOS夯实:内存管理 文章转自 内存管理 最近的学习计划是将iOS的机制原理好好重新打磨学习一下,总结和加入自己的思考. 有不正确的地方,多多指正. 目录: 基本信息 旧时代的细节 新时代 基本信息 ...
- 高性能JAVA开发之内存管理
这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题,调研了一些java内存管理的资料,现整理如下: 一.JVM中的对象生命周期 对象的生命周期一般分为7个阶段:创建阶段,应用阶段,不可视阶 ...
随机推荐
- FOJ1205 小鼠迷宫问题 (BFD+递推)
FOJ1205 小鼠迷宫问题 (BFD+递推) 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这m×n个房间中有一些房间是封闭的,不允许任何人进入.在迷宫中任何位置均 ...
- Linux下切换python版本
http://www.cnblogs.com/rhjeans/p/5499193.html
- COGS——T 21. [HAOI2005] 希望小学
http://www.cogs.pro/cogs/problem/problem.php?pid=21 ★★ 输入文件:hopeschool.in 输出文件:hopeschool.out ...
- 洛谷 P1294 高手去散步
P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始 ...
- KM最大匹配 HDU 2255
KM算法详解+模板 - wenr - 博客园 http://www.cnblogs.com/wenruo/p/5264235.html #include<iostream> #inclu ...
- OpenCv 人脸检測的学习
近期公司要组织开发分享,可是自己还是新手真的不知道分享啥了,然后看了看前段时间研究过OpenCv,那么就分享他把. openCv就不介绍了,说下人脸检測.事实上是通过openCv里边已经训练好的xml ...
- lightoj--1116--Ekka Dokka(水题)
Ekka Dokka Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Submit Stat ...
- 28. Brackets安装angularjs插件
Brackets是Adobe公司研发的一款开源WEB前端开发框架,界面清爽简约,代码提示功能比较强大,而且支持第三方插件,其提供的插件库中有大量的对Brackets感兴趣的开发人员所开发的插件,使用者 ...
- springmvc使用jQuery.datatable时遇到的错误
springmvc使用jQuery.datatable时遇到的错误 1正确时返回 josn结果: {,,,,,,,,,,,,,,,,"} 页面显示处理中(processing),列表空白,其 ...
- 推荐的JavaScript编码规范
http://www.qdfuns.com/notes/26812/7825414125719306fa409c709ee7b2a3.html