zoukankan      html  css  js  c++  java
  • OC-内存管理的所有权链问题

       背景: 最近维护之前的项目,没有注意具体的对象之间的关系,导致了一个bug。 让我了解到对象的所有权链问题。

       需要内存管理的知识:

          众所周知,oc是使用引用计数来管理内存的(当一个对象被持有,他的retain count 就会+1,当他失去一个持有者时,retain count 会-1,若retain count 为0 时,在ARC下就会被销毁);

         1. 如果有一个方法的局部变量指向某个对象时,那么该变量就拥有这个对象。

    // 假如有一个对象叫 person
    
    
    /*有一个方法是 谁是jack,在方法内声明一个指针变量jack,将指针指向person对象,那么指针变量jack 就拥有person对象,person 的retain count +1
    */
    -(void)whoIsJack:{
       Person *jack = [Person new];
       jack = person;
    
    }

      2.当A对象的实例变量指向B对象时,那么A就拥有B。(所有权链的问题就是这条)

      所有权链,和名字一样对象所(持)有者的的链条, 举个例子: A拥有B,B拥有C,C拥有D,D还可以拥有E。 

     当B 指向F(即B不在持有C而是持有F), 且 C没有再被其它对象持有,那么C 没有被持有,retain count 为0,那么其就会被销毁。以此,D和E 也就没有了持有者,就会被销毁。

  • 相关阅读:
    java几种数据的默认扩容机制
    web.xml配置详解
    Bootstrap文件上传组件
    JAVA四则运算算法
    Oracle 和 mysql 的批量操作Sql语句 的区别
    JAVA使用ItextPDF
    c# 状态机实现
    c++11模拟boost元占位符placeholder
    vs2012 函数参数内存对齐引发编译错误
    windows下matplotlib编译安装备忘
  • 原文地址:https://www.cnblogs.com/DafaRan/p/7262253.html
Copyright © 2011-2022 走看看