- (void)testWeak
{
? ? id __weak weakObj = nil;
? ? {
? ? ? ? //自己生成并持有對(duì)象
? ? ? ? //因?yàn)閟trongObj變量為強(qiáng)引用,所以自己持有對(duì)象
? ? ? ? id __strong strongObj = [[NSObject? alloc] init];
? ? ? ? NSLog(@"strongObj: %@", strongObj);
? ? ? ? //obj1持有對(duì)象的弱引用。也就是obj1弱引用了strongObj對(duì)象
? ? ? ? weakObj = strongObj;
? ? ? ? //輸出obj1變量持有的弱引用對(duì)象
? ? ? ? NSLog(@"A: %@", weakObj);
? ? }
? ? //因?yàn)閟trongObj變量超出其作用域,強(qiáng)引用strongObj失效,所有自動(dòng)釋放自己持有的對(duì)象。
? ? //因?yàn)閷?duì)象無(wú)持有者,所以當(dāng)代碼執(zhí)行到大括號(hào)外面時(shí),廢棄strongObj對(duì)象
? ? //廢棄該對(duì)象(strongObj)的同時(shí),
? ? //持有該對(duì)象(strongObj)弱引用的weakObj變量的弱引用失效,
? ? //nil賦值給weakObj。打印結(jié)果:
? ? NSLog(@"B: %@", weakObj);
}
png