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 也就没有了持有者,就会被销毁。

  • 相关阅读:
    SQLServer和Access数据传输简单总结
    Session 详解
    SQL日志文件过大问题的解决方法
    如何删除表中的重复记录?
    HDOJ 3711 Binary Number
    HDOJ 2022
    活动选择问题
    浮点数的比较
    HDOJ 2037
    找最长递增子数列
  • 原文地址:https://www.cnblogs.com/DafaRan/p/7262253.html
Copyright © 2011-2022 走看看