自动引用计数(__weak修饰)

- (void)testWeak

{

    id __weak weakObj = nil;

    {

        //自己生成并持有对象

        //因为strongObj变量为强引用,所以自己持有对象

        id __strong strongObj = [[NSObject  alloc] init];


        NSLog(@"strongObj: %@", strongObj);

        //obj1持有对象的弱引用。也就是obj1弱引用了strongObj对象

        weakObj = strongObj;


        //输出obj1变量持有的弱引用对象

        NSLog(@"A: %@", weakObj);

    }


    //因为strongObj变量超出其作用域,强引用strongObj失效,所有自动释放自己持有的对象。

    //因为对象无持有者,所以当代码执行到大括号外面时,废弃strongObj对象


    //废弃该对象(strongObj)的同时,

    //持有该对象(strongObj)弱引用的weakObj变量的弱引用失效,

    //nil赋值给weakObj。打印结果:

    NSLog(@"B: %@", weakObj);

}

自动引用计数(__weak修饰)_第1张图片
png

你可能感兴趣的:(自动引用计数(__weak修饰))