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开发--漫谈内存管理(一)的更多相关文章

  1. IOS开发的内存管理

    关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...

  2. IOS开发小记-内存管理

    关于IOS开发的内存管理的文章已经很多了,因此系统的知识点就不写了,这里我写点平时工作遇到的疑问以及解答做个总结吧,相信也会有人遇到相同的疑问呢,欢迎学习IOS的朋友请加ios技术交流群:190956 ...

  3. [转载]对iOS开发中内存管理的一点总结与理解

    对iOS开发中内存管理的一点总结与理解   做iOS开发也已经有两年的时间,觉得有必要沉下心去整理一些东西了,特别是一些基础的东西,虽然现在有ARC这种东西,但是我一直也没有去用过,个人觉得对内存操作 ...

  4. iOS开发ARC内存管理技术要点

    本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇 ...

  5. IOS开发之内存管理--dealloc该写些什么

    在非ARC开发环境中,dealloc是类释放前,清理内存的最后机会.到底那些变量和属性该释放呢,一些特殊的类(nstimer,observer)该怎么释放.需要注意的是不释放会引起内存泄露,过度释放也 ...

  6. (转)iOS开发ARC内存管理技术要点

    转自:http://www.cnblogs.com/flyFreeZn/p/4264220.html 本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automati ...

  7. iOS开发ARC内存管理

    本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...

  8. iOS夯实:内存管理

    iOS夯实:内存管理 文章转自 内存管理 最近的学习计划是将iOS的机制原理好好重新打磨学习一下,总结和加入自己的思考. 有不正确的地方,多多指正. 目录: 基本信息 旧时代的细节 新时代 基本信息 ...

  9. 高性能JAVA开发之内存管理

    这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题,调研了一些java内存管理的资料,现整理如下: 一.JVM中的对象生命周期 对象的生命周期一般分为7个阶段:创建阶段,应用阶段,不可视阶 ...

随机推荐

  1. cvBoostStartTraining, cvBoostNextWeakClassifier和 cvBoostEndTraining

    /****************************************************************************************\ * Boostin ...

  2. OpenCV【2】---读取png图片显示到QT label上的问题

    问题一:   操作图片test.png是一个365x365的PNG图片   通过OpenCV自带的GUI显示出来图像是没问题的,例如以下操作代码所看到的: QStringfileName=QFileD ...

  3. Android严苛模式StrictMode使用详解

    StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的.举个例子来说,如果开发者在UI线程中进行了 ...

  4. Entity Framework之Model First开发方式

    一.Model First开发方式 在项目一开始,就没用数据库时,可以借助EF设计模型,然后根据模型同步完成数据库中表的创建,这就是Model First开发方式.总结一点就是,现有模型再有表. 二. ...

  5. Magento--判断checkout中是否使用了coupon code

    在checkout页面中,如果想判断顾客是否有使用coupon code,可以通过checkout session来进行判断.以下代码会返回checkout中使用的coupon code或者返回空(当 ...

  6. 用Struts2搭建一个登录例子【本人亲测好用】

    今天尝试struts2的搭建,遇到不少的问题,终于一一解决,逛了很多地方,最终完成搭建 1.首先要下载struts2的一些组件,我下载的是版本2.3.4.1,Eclipse是4.6版本的.由于版本的不 ...

  7. MyEclipse的代码自动提示功能

     一般默认情况下,Eclipse ,MyEclipse的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...

  8. How Javascript works (Javascript工作原理) (十一) 渲染引擎及性能优化小技巧

    个人总结:读完这篇文章需要20分钟,这篇文章主要讲解了浏览器中引擎的渲染机制. DOMtree       ----|   |---->  RenderTree CSSOMtree  ----| ...

  9. vue.js中compted与model的区别

    在p便签内写的{{reversemessage}}方法,若js里对应的函数为computed则不需要加上括号 若js里对应的函数为model则应该将{{reversemessage}}改为{{reve ...

  10. 【Uva 1601】The Morning after Halloween

    [Link]: [Description] 给你一张平面图; 最多可能有3只鬼; 给出这几只鬼的初始位置; 然后,这几只鬼有各自的终点; 每秒钟,这几只鬼能同时移动到相邻的4个格子中的一个 任意两只鬼 ...