首页 > 代码库 > __weak修饰符详解

__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>
   

__weak修饰符详解