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

 

posted @ 2017-07-31 11:29  大发写字的地方  阅读(264)  评论(0编辑  收藏  举报