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. 常见bug分析

    变量类型不匹配,形参和实参类型不匹配,隐式类型转换,变量类型赋值不匹配, 工具不熟悉,导致逻辑错误,查看代码,测试驱动开发,完整的测试用例,覆盖所有分支, 变量超出范围,对于大的数据要特别注意, 工具 ...

  2. 搭建Lvs负载均衡群集

    一.Lvs详解 lvs内核模型 1.模型分析 用户访问的数据可以进入调度器 匹配调度器分配的虚拟IP|IP+端口(路由走向) 根据调度器的算法确定匹配的服务器 2.调度条件:基于IP.基于端口.基于内 ...

  3. Configure Tomcat 7 to run Python CGI scripts in windows(Win7系统配置tomcat服务器,使用python进行cgi编程)

    Pre-installation requirements1. Java2. Python steps1. Download latest version of Tomcat (Tomcat 7) f ...

  4. HNU 11979 Roll call 二分图匹配

    题意: 众所周知,老师经常在班级上点名.点名是从名单上叫一个人的名字或者id来判断名单上这个人是否在场.学生们总是有各种各样的理由不来,所以他们需要其他人帮他们答到.但是打到工作不是这么简单,出于各种 ...

  5. h5调用底层接口的一些知识

    之前接触过这方面的知识,一直想写一些关于代码的文字,但考虑到浪费时间,又不具备大神的实力,也不想去把别人的代码照搬过来,所以一直都是空白着的,今天敲代码的时候,有了一个比较好的想法,第一,定位在学习这 ...

  6. PatentTips - Virtualizing performance counters

    BACKGROUND Generally, the concept of virtualization in information processing systems allows multipl ...

  7. 坑爹的RockSaw和坑爹的windows7

    坑爹的RockSaw和坑爹的windows7 http://chen4w.iteye.com/blog/1153433

  8. 洛谷 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

    P3663 [USACO17FEB]Why Did the Cow Cross the Road III S 题目描述 Why did the cow cross the road? Well, on ...

  9. django-xadmin定制之列表页searchbar placeholder

    环境:xadmin-for-python3 python3.5.2 django1.9.12 列表页的searchbar如果提供的可搜索字段,都没提示哪个字段可搜索,很不友好,本次定制主要增加inpu ...

  10. 【转载】C# 跨线程调用控件

    转自:http://www.cnblogs.com/TankXiao/p/3348292.html 感谢原作者,转载以备后用 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停 ...