- (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);
}