首页 > 其他 > 详细

__weak修饰符详解

时间:2014-12-04 15:36:42      阅读:254      评论:0      收藏:0      [点我收藏+]
第一、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修饰符详解

原文:http://blog.csdn.net/richard_rufeng/article/details/41724593

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!