iOS 开发中的ARC和MRC的区别与联系

原创 2015年11月18日 16:23:37

iOS开发中的内存管理问题:在这我简要概述一下,详细讲的话内容挺多,而且是作为一个ios开发人员,或ios开发爱好者,这是必须了解的:
Objective-c中提供了两种内存管理机制MRC(MannulReference Counting)和ARC(Automatic Reference Counting),分别提供对内存的手动和自动管理,来满足不同的需求。其实arc 内部机制原理也是来源于mrc ,arc 是在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。arc的首要目的就是让代码简洁化,编程简单化,开发更顺心应手,减少不必要的小问题小疏忽;顾名思义,自动引用计数管理,关于内存的申请,使用和释放过程都交给系统自动实现,我们可也不用关系里面的过程,但是事实上还是mrc的原理,只是是系统帮我们做了管理;
mrc,手动引用计数器管理,是在我们申请到某一块内存,在使用之后,要手动释放,释放机理涉及到计数器问题,如果未释放内存,会造成内存的浪费,俗称内存泄露,甚至引起很多未知的错误结果,这对程序有威胁很大,但是,何时释放,怎么释放,注意哪些问题,很有讲究,这就是mrc的不便之处,也是苹果推出arc的缘由;
mrc的具体机理,计数器是什么,在程序过程中的变化,在达到什么程度会释放内存,怎么操作;建议查阅相关文档;
mrc ,在代码上下形式主要表现为,调用该对象时,要做retain操作,使用完成后要release,最后还要重写dealloc方法,对该类的所有对象做释放,所以在mrc的代码会有autorelease,retain,release等词语,
而arc不允许有这些词汇,应为这些操作都由系统自动完成。
引用计数器
1.和内存管理相关的方法
1)alloc 引用计数器自动设为1
2)retain 引用计数器+1 返回了经过+1以后的当前实例对象
3)release 引用计数器-1,并不一定是释放
4)retainCount 获取引用计数器的值
5)dealloc 当实例对象被销毁之前,系统自动调用。
一定要调[super dealloc]
和内存管理相关的名词
1)僵尸对象:此对象被销毁,不能再使用,不能给它发送任何消息
2)野指针:指向僵尸对象(不可用的内存)的指针,给野指针发送消息将会产生不可控的后果。
3)空指针:没有指向任何对象的指针,给空指针发消息不会产生任何行为
内存管理原则
1.如果你想持有某个对象,就必须负责让做一次retain操作,引用计数器+1.
2.如果你想放弃对某个对象的持有权,就要负责让其做一次release操作,引用计数器-1.
3.谁retain,谁release。
说到最后,如过是新手的话建议用mrc来写,这样可以清晰的认识oc的内存管理机制,避免一些不必要的失误


ARC和MRC下Block的使用注意

Block 1.是一段代码块,只在被调用的时候执行(类似于方法和函数) 2.是一种数据类型(类似于’int’,’NSString’) 3.可以定义成临时变量 4.可以当做参数传递 5.可以定义成属性 ...
  • sinat_20559947
  • sinat_20559947
  • 2016年09月21日 17:25
  • 1753

ios 工程中ARC与MRC

********************************************************************************* ARC 自动引用计数 MRC手动...
  • Sunnylucy1
  • Sunnylucy1
  • 2014年12月20日 14:36
  • 1373

block 的ARC和MRC中的区别

block在ARC和MRC中的声明引用有些区别.      /**      block可以存储在栈中,也可以在堆中      默认存储在栈中,不需要管理内存      存储在堆中的block会对bl...
  • zhangwenhai001
  • zhangwenhai001
  • 2015年06月30日 23:00
  • 3263

iOS开发之ARC MRC混编

Xcode5之后,新建iOS工程,默认都是ARC模式,但是有时候我们的项目中需要用到一些第三方框架或者接手一个旧项目,我们拿过来来却发现是非ARC的,这时候我们需要进行ARC和MRC混编。...
  • Bruce__Liu
  • Bruce__Liu
  • 2015年07月22日 10:56
  • 843

iOS开发:MRC和ARC

Objective-c中提供了两种内存管理机制MRC(MannulReference  Counting)和ARC(Automatic Reference Counting)自动引用计数,分别提供对...
  • qq_30495749
  • qq_30495749
  • 2015年09月17日 11:14
  • 178

iOS开发-ARC与MRC

ARC,全称Automatic Reference Counting,即自动引用计数,是iOS5推出的新功能.对于很多习惯了MRC的程序员来说,并不太能够放心使用ARC.本人从接触iOS以来,也是一直...
  • liangge013
  • liangge013
  • 2015年04月20日 15:10
  • 346

Objective-C 编程之道 iOS设计模式解析 修改MRC为ARC

  • 2017年12月11日 15:05
  • 478KB
  • 下载

[Cocos2D 2.x iOS 开发笔记2] 在Project中启用ARC

用Cocos2D 2.x 新建立的工程是不使用ARC的,因此为了省去手动内存管理的环节,利用ARC来提高编码效率,有必要对初始代码进行ARC转换。 看了一些教程,有的写的很麻烦,后来发现其实ARC转...
  • songrotek
  • songrotek
  • 2013年05月08日 16:26
  • 2255

ios 开发中什么是ARC

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加...
  • wscqqlucy
  • wscqqlucy
  • 2012年10月12日 16:38
  • 633

Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别

1.内存管理范围 内存中存在五大区域,他们分别是:堆区、栈区、数据段、BSS段以及代码段。其中,栈区用来存放局部变量,当声明局部变量的方法执行完毕之后局部变量才会被释放;BSS段以及数据段分别存放未...
  • u013916899
  • u013916899
  • 2016年11月25日 17:36
  • 108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 开发中的ARC和MRC的区别与联系
举报原因:
原因补充:

(最多只允许输入30个字)