iOS 代码规范~避免循环引用

//联系人:石虎  QQ: 1224614774 昵称:嗡嘛呢叭咪哄

一、避免循环引用


如果【block内部】使用【外部声明的强引用】访问【对象A】, 那么【block内部】会自动产生一个【强引用】指向【对象A

如果【block内部】使用【外部声明的弱引用】访问【对象A】, 那么【block内部】会自动产生一个【弱引用】指向【对象A


__weak typeof(self) weakSelf = self;

dispatch_block_t block = ^{

    [weakSelf doSomething]; // weakSelf != nil

    // preemption, weakSelf turned nil

    [weakSelf doSomethingElse]; // weakSelf == nil

};


二、最好这样调用:


__weak typeof(self) weakSelf = self;

myObj.myBlock = ^{

    __strong typeof(self) strongSelf = weakSelf;

    if (strongSelf) {

        [strongSelf doSomething]; // strongSelf != nil

        // preemption, strongSelf still not nil(抢占的时候,strongSelf 还是非 nil 的)

        [strongSelf doSomethingElse]; // strongSelf != nil }

        else { // Probably nothing... return;

        }

    };


谢谢!!!

    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值