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个阶段:创建阶段,应用阶段,不可视阶 ...
随机推荐
- vscode 问题
*)不能切换为中文输入法 没有搜索到解决办法,重启应用解决
- 从终端运行python程序
终端窗口运行.py程序 首先你要安装python,命令行输入 python 有python提示符 >>> 出现说明安装成功 程序第一行应该是 #! python3 #! python ...
- 基于express+redis高速实现实时在线用户数统计
作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样基于express+redis高速实现实时在线用户数统计. 1. 在github.com上创建项目uv-tj.将其同步到本地: ...
- Firefox访问https的网站,一直提示不安全
http://mozilla.com.cn/thread-374897-1-1.html 要激活此功能步骤如下: 在地址栏键入"about:config" 点击“我了解此风险” 在 ...
- Linux系统的LOG日志文件及入侵后日志的清除
UNIX网管员主要是靠系统的LOG,来获得入侵的痕迹.当然也有第三方工具记录入侵系统的 痕迹,UNIX系统存放LOG文件,普通位置如下: /usr/adm - 早期版本的UNIX/var/adm - ...
- 关于vue中的语法糖v-model
开发src-在线系统的过程中,封装了很多组件,如Dialog prompt等,在开源项目的组件中这些组件使用v-model来控制显示,我来总结一下关于自己学习到的v-model知识 1. 使用prop ...
- 16个ASP.NET MVC扩展点【附源码】
转载于:http://www.cnblogs.com/wupeiqi/p/3570445.html 1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中! ...
- Linux常用图片查看处理软件
1.Shotwell是一款轻量级的图片管理软件,GNOME桌面环境默认自带,您可以使用它来从数码相机中导入相片.shotwell允许用户对图片进行管理,并且提供了一些基本的编辑功能,您可以对图片进行剪 ...
- 机器学习实践:《Python机器学习实践指南》中文PDF+英文PDF+代码
机器学习是近年来渐趋热门的一个领域,同时Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一.<Python机器学习实践指南>结合了机器学习和Python 语言两个热门的领域 ...
- MySQL Field排序法
检索 id = 2 or id = 5 or id = 9 or id = 56 or id = 38.然后按照 2 , 5, 9, 56, 38 这个顺序排列,这是题目要求 以下为解决方案: 1 ...