美文网首页
iOS 的内存管理(ARC)简单概念与原理

iOS 的内存管理(ARC)简单概念与原理

作者: 路墨 | 来源:发表于2016-01-07 16:40 被阅读598次

    内存管理的方式:

    1.MRC(Manual Reference

    Count)人工引用计数:内存的开辟和释放由程序代码进行控制(程序员要熟悉内存管理的机制:引用计数)

    2.ARC(Automatic Reference Count)自动引用计数(

    不是自动管理内存)(编译器帮助程序员默认加了释放代码)(ARC是基于MRC的)

    @注:

    1.iOS支持MRC和ARC两种内存管理方式,OC采用计数机制管理内存,标记这块内存在被几个对象使用

    2.在C语言中使用malloc和free,经行堆内存的创建和释放。堆内存只用正在使用和销毁两个状态。两个以上的指针使用同一块内存,C语言无法记录内存使用者的个数

    @影响引用计数的方法

    +alloc

    -retain

    -copy

    -release

    -autorelease

    (思考例子中最后count输出结果不是0是因为?快速有效性);

    copy:

    1.把某⼀一内存区域的内容拷⻉贝⼀一份,拷⻉贝到新的内存空间⾥里

    去,被拷⻉贝区域的引⽤用技术不变,新的内存区域的引⽤用计数为1。

    2.不是所有对象都可以接收copy消息,只能接受NSCopying协议的对象

    3.深拷贝,拷贝的是指针和指针指向的对象,原来的对象不会发生任何变化,相当于克隆

    4.浅拷贝,拷贝的的是指针,本身变化,其拷贝也发生变化,相当于人与自身影子的变化。

    (面试题:1浅复制和深复制的区别?浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身。//通过对象的指针来访问这个对象----只赋值地址深层复制(mutableCopy):复制引用对象本身---再创建一个对象意思就是有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了

    两份独立对象本身。//当修改A时,A copy不变。

    @dealloc:是继承自父类的方法,当所有的引用计数都为0时,由对象自动调用。

    内存管理要点:

    Objective-C

    使用引用计数机制(retainCount)来管理内存。内存每被引用一次,该内存的引用计数+1,每被释放一次引 用计数-1。当引用计数= 0 的时候,调用该对象的 dealloc 方法,来彻底从内存中删除该对象。

    alloc,allocWithZone,new(带初始化)时:该对象引用计数 +1;

    retain:手动为该对象引用计数 +1;

    copy:对象引用计数 +1;

    mutableCopy:生成一个新对象,新对象引用计数为 1;

    release:手动为该对象引用计数 -1;

    autorelease:把该对象放入自动释放池,当自动释放池释放时,其内的对象引用计数 -1。来源:Amber 

    ARC基本上是很安全的,内存泄漏不太存在,但也是存在的,关于内存泄漏的请看下一不大神写的 

    相关文章

      网友评论

          本文标题:iOS 的内存管理(ARC)简单概念与原理

          本文链接:https://www.haomeiwen.com/subject/injfkttx.html