zoukankan      html  css  js  c++  java
  • 使用block的时候,导致的内存泄漏

      明确,只要在block里边用到我们自己的东西,成员变量,self之类的,我们都需要将其拿出来,把它做成弱指针以便之后进行释放。

      在ZPShareViewController这个控制器中,由如下代码:

      ZPSettingItem *item = [[ZPSettingItem alloc]init];

      item.option = ^{

          vc.delegate = self;

        };

      这里的option就是一个block方法,它导致循环引用,出现内存泄漏,而解决循环引用出现的内存泄漏的方法是:必须得有一个引用是弱指针,只有这样才能在这个引用结束之后进行内存回收。所以我们需要将这一段中的最后的那一个引用变成弱指针。

      解决这里的block,导致的内存泄漏我们可以采取下面的办法:

         // __weak typeof(self)share = self;等同于  __weak typeof(ZPShareViewController)share = self  或者 __weak ZPShareViewController* share = self; 但是__weak typeof(self)share = self 的好处在于 以后如果别的地方用到这种类型的方法就可以直接将代码拿过去,进行利用。

      // 这段代码的意思是:创建一个self类型的弱指针,将self赋值给它,这样我们就得到了一个self类型的弱指针。

      __weak typeof(self)share = self;  

      ZPSettingItem *item = [[ZPSettingItem alloc]init];

      item.option = ^{

          vc.delegate = share; // 将一个弱指针赋值给他

        };

      注意:当我们发现使用__weak这种方式解决不了问题的时候可以尝试采用__unsafe_unretained typeof(self) selfVc = self; 这种方式可能会导致野指针,所以一般不建议采用,只有当上诉方法解决不了问题的时候才会采取这种方式进行创建。

  • 相关阅读:
    R--相关分布函数、统计函数的使用
    Spark Streaming
    统计与分布的相关知识
    Python--WebDriverWait+expected_conditions的一个应用
    Python+Selenium与Chrome如何进行完美结合
    Python+Selenium+Chrome 的一个案例
    python -使用Requests库完成Post表单操作
    JetBrains PyCharm 2018.2.4 x64 工具里如何安装bs4
    用JetBrains PyCharm 开发工具写一个简单python案例
    dom4j学习总结(一)
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/4718088.html
Copyright © 2011-2022 走看看