年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1820|回复: 0

Captureing ‘self’ strongly in this block is likely to lead to a retain cycle

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-9-4 11:12:35 | 显示全部楼层 |阅读模式
    警告:Captureing ‘selfstrongly in this block is likely to lead to a retain cycle

    这个警告我们在使用block时会经常碰到,什么原因引起的呢?其实是ARC机制造成的

    分析:Block对象在创建时会retain一次,如果在block中使用self.xxx时,ARC会自动将self也retain一次,这样就形成了一个retain cycle

    解决:创建一个本地变量blockSelf,指向self,然后用结构体语法访问实例变量。

    如:__block ViewController *blockSelf = self;
    然后在block中需要用到self.xxx时,改成blockSelf.xxx就可以了,因为这么修改之后,blockSelf是本地变量,是弱引用,因此在_block被retain的时候,并不会增加retain count,所以retain cycle就解除了,Xcode也不再出现警告了,问题解决。


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-5-8 04:45 , Processed in 0.043110 second(s), 19 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表