MCR & ARC

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的内存管理机制,避免一些不必要的失误

在Xcode中切换MRC与ARC : 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,013评论 1 16
  • iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与...
    蚊香酱阅读 5,762评论 8 119
  • 本文首发于我的个人博客:「程序员充电站」[https://itcharge.cn]文章链接:「传送门」[https...
    ITCharge阅读 32,253评论 47 185
  • 为什么进行内存管理? 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时...
    天天想念阅读 913评论 1 7
  • 项目终于结束,这几天熬夜太多,能量有点不够用,借端午机会好好调整一下。廉颇老矣,不能熬夜了。。。 原本计划是带上一...
    黑土钱阅读 315评论 8 4