oc 生成并持有对象的强引用

id __strong obj0 = [[NSObject alloc]init];/*对象A*/

//obj0 持有对象A的强引用

id __strong obj1 = [[NSObject alloc]init];/*对象B*/

//obj1 持有对象B的强引用

id __strong obj2 = nil;

//obj2 不持有任何对象

obj0 = obj1;

//obj0持有由obj1赋值的对象B的强引用,

  因为obj0被赋值,所以原来的对 对象A的强引用失效了.

  对象A的所有者不存在,因此废弃对象A.

  此时,持有对象B的强引用变为obj0和obj1.

obj2 = obj0;

//obj2持有由obj0 赋值的对象B的强引用

此时,持有对象B的强引用的对象变为obj0,obj1,obj2.

obj1 = nil;

//因为obj1赋予了nil,所以对对象B的强引用失效了.

此时,对象B的强引用变为obj0和obj2.

obj0 = nil;

//因为obj0赋予了nil,所以对对象B的强引用失效了.

此时,对象B的强引用变为obj2.

obj2 = nil;

//因为obj2赋予了nil,所以对对象B的强引用失效了.

对象B的所有者不存在,因此废弃对象B

原文地址:https://www.cnblogs.com/lsh1234/p/6535328.html