在持有某對象的弱引用時,若該對象被廢棄,則此弱引用自動失效並處於nil被賦值的狀態。
第二、實例
id __weak obj1=nil;
{/*
* 生成並持有對象A
*/
id __strong obj0=[[Test alloc] init];
/*
* obj1爲對象的弱引用
*/
obj1=obj0;
}
此時,obj0變量超出其作用域,強引用失敗,自動釋放持有對象,調用Test類的dealloc函數
如果把obj1聲明爲strong
id __strong obj1=nil;
{
/*
* 生成並持有對象A
*/
id __strong obj0=[[Test alloc] init];
/*
* obj1爲對象的強引用
*/
obj1=obj0;
}
此時,obj0變量超出其作用域,但obj1爲強引用,所以不會釋放對象
第三、
__weak變量,當宿主對象被釋放的釋放,它自動會變爲weak,通過下面兩個實例可以看到
id __weak obj1=nil;
{
/*
* 生成並持有對象A
*/
id __strong obj0=[[Test alloc] init];
/*
* obj1爲對象的弱引用
*/
obj1=obj0;
}
NSLog(@"%@",obj1);
輸出結果爲:nil
id __strong obj1=nil;
{
/*
* 生成並持有對象A
*/
id __strong obj0=[[Test alloc] init];
/*
* obj1爲對象的強引用
*/
obj1=obj0;
}
NSLog(@"%@",obj1);
輸出結果:
<Test: 0x100100350>