__weak修飾符詳解

第一、weak弱引用不能持有對象實例。
在持有某對象的弱引用時,若該對象被廢棄,則此弱引用自動失效並處於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>
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章