__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>
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: compare_exchange_weak是C++11中的一个原子操作函数,用于比较并交换操作。它可以在多线程环境下保证数据的原子性,避免出现数据竞争的情况。与compare_exchange_strong相比,它的弱版本在交换操作失败时不会抛出异常,而是返回一个bool值表示操作是否成功。 ### 回答2: compare_exchange_weak是C++中的原子操作函数之一。它的作用是比较给定的值和内存中的值,如果相等,则将内存中的值替换为一个新的值。 compare_exchange_weak函数的使用方式如下: ``` bool compare_exchange_weak(T& expected, T desired); ``` 其中,expected是一个引用参数,表示期望的值;desired是新的值。函数首先比较内存中的值和expected,如果相等,则将内存中的值替换为desired并返回true;如果不相等,则将内存中的值赋给expected并返回false。 compare_exchange_weak函数是弱的比较和替换原子操作。之所以称为"弱",是因为它在比较和替换期间可能会受到其他线程的干扰,需要重试。这种重试可以保证代码的正确性,但可能会影响性能。 与之相对的是compare_exchange_strong函数,它是"强"的比较和替换原子操作。compare_exchange_strong函数不需要重试,因此使用起来更简单,但有可能导致不必要的循环开销。 需要注意的是,compare_exchange_weak函数的返回值不仅表示比较和替换的结果,还表示内存中的值是否被替换。因此,在使用该函数时,需要根据返回值判断操作是否成功。 总之,compare_exchange_weak是C++中的原子操作函数,用于比较给定值和内存中的值,并在相等时替换。它是一种弱的比较和替换操作,可能需要重试以保证正确性。 ### 回答3: compare_exchange_weak是一种原子操作,其目的是在多线程环境下实现对共享变量的原子比较和交换操作。在C++中,compare_exchange_weak函数通常与一个参数一起使用,该参数用于表示预期值。此函数会比较共享变量的值与预期值是否相等,如果相等,则将共享变量的值修改为新值,返回true;如果不相等,则不进行修改,返回false。 与compare_exchange_strong函数相比,compare_exchange_weak函数在性能上可能略有优势,但在并发度较高的情况下,可能会出现一些问题,因为它可能会被其他线程中断,导致原子操作失败。在这种情况下,函数会返回false,但同时还会返回共享变量的当前值,并将预期值修改为当前值。 compare_exchange_weak函数通常与循环结合使用,以确保原子操作的成功。在循环中,可以不断尝试进行原子操作,直到成功为止。这种方法可以有效地避免由于竞态条件而导致的共享变量值的错误结果。 总而言之,compare_exchange_weak函数是一种用于实现原子比较和交换操作的方式。尽管它在某些情况下可能会失败,但通过循环的方式,我们可以确保操作的成功,并保证共享变量的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值