美文网首页
引用计数与循环引用

引用计数与循环引用

作者: 大白好 | 来源:发表于2016-03-23 19:09 被阅读1333次

    <p>1. 引用计数 </p>

    • 引用计数是一个简单而有效的管理对象生命周期的方式,不管OC还是swift都采用引用计数这种内存管理方式
    • 引用计数可以有效的管理对象的生命周期.当我们创建一个新对象的时候,它的引用计数为1,当一个新的指针指向这个对象的时候,我们将他的引用计数加1,当某个指针不再需要指向这个对象的时候,这个对象的引用计数减1,当这个对象的引用计数为0的时候,说明这个对象不再被任何指针指向了,这个时候我们就可以将对象销毁,回收内存
    • 引用计数真正的用场是对象之间传递与共享数据.

    <p>2. 循环引用 </p>

    • 当对象A和对象B,相互引用了对方作为自己的成员变量,只有自己销毁的时,才能将成员变量的引用计数减1,因为对象A的销毁依赖于对象B的销毁, 对象B的销毁依赖于对象A的销毁,这样子就造成了循环引用,即使外部没有指针能够访问他们,但是他们依然不能被释放.

    • 引用计数这种管理内存的方式虽然简单,但他不能很好的解决循环引用的问题,

    • 解决循环引用的方法

      • 第一个方法是我明确知道这里会存在循环引用,在合适的位置主动断开环中的一个引用.是对象得到回收
      • 第二个方式弱引用.例如我们在ARC中的delegate,block
        <p> 3. 使用xcode检测循环引用 </p>
    • 我们可以使用Instruments工具中的Leaks来检查内存泄露

        // 在xcode 中写入这些代码
        NSMutableArray *firstArray = [NSMutableArray array];
        NSMutableArray *secondArray = [NSMutableArray array];
        [firstArray addObject:secondArray];
        [secondArray addObject:firstArray];
      
    • 开发Instruments工具选择Leaks


    • 选择运行程序的模拟器,然后点击开始(方块变成红点)


    • 切换到Leaks这栏,选择'Cycles&Roots'可以看见下图,方便我们找到循环引用的对象


    相关文章

      网友评论

          本文标题:引用计数与循环引用

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