上delloc 无呼叫 故障排除 笔记[通俗易懂]

上delloc 无呼叫 故障排除 笔记

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

经验 delloc 无呼叫 基本上可以得出结论,即循环引用的原因。

遇到这样的情况基本上可分为  

1: 属性声明weak的地方 写成了 strong  。比方delegate。

2: block语法块中 存在的强引用。

所以遇到delloc 基本上排查下这两种情况 就能解决80%的问题了。 

可是现实中往往会有遇到一些其它的问题所在 。比方 我今天遇到的一个viewcontroller  一直没有释放。全局搜索了这个文件中面 全部用到的 delegate 以及self.  和_XX 属性 结果 发现都没问题。  能够返回上一级页面 此viewcontroller 却一直没有调用。 后来发现这个问题出在父类的身上。

伪代码例如以下



@implementation BaseViewController ()

– (id)init

{

    self = [super init];

    if (self) {

         self.back = [[CustomItem allocinitWithtitle:returnHomeString clickedBlock:^(id sender) {

  [super goBack];
      }];

}

@end

@interface ViewControllerA : BaseViewController

– (id)init

{

    self = [super init];

    if (self) {

           }

}

@end


ViewControllerA 一直没有释放。当时在ViewControllerA 搜寻了半天也没查出是哪里问题来,后来往父类去 看 结果发现了这种代码。当时也是醉了。



遇到这样的情况 事实上有两种改动方式 


A 直接将   [super goBack];  提取出来  封装成另外一个函数 比方 goBackFunc,然后在block 中再利用weakSelf 去调用goBackFunc

B 利用反射机制取到父类

 BaseViewController *strongSelf = weakSelf;

if(strongSelf){

struct

objc_super
superSelf = { strongSelf, [
BaseViewController

superclass
] };

                objc_msgSendSuper(&superSelf, @selector(goBack));

}

这样子  直接在block块中替换代码
能够用不另外封装函数。



PS  关于Instruments 的 Allocations  也有一个陷阱 。当发现你写的代码 已经调用了delloc, 可是显示的Persistent 值并没有降低一直添加时  检查下是否之前打开过zombie模式。 有的话关掉  。这两个模式是冲突的。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116674.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA float转int 如何取整_int型变量n转化成float

    JAVA float转int 如何取整_int型变量n转化成float网上巴巴的说了那么多,倒是给个结论啊.搜索半天,浪费一堆时间,不知道到底哪个说的对哪个说的错.直接自己写着看吧. floata1=2.42f; floata2=2.13f; floata3=2.89f; floata4=2.99f; floata5=2.35f; floata6=35.67f; floata7=9.8f; …

    2025年7月16日
    0
  • pip安装scrapy失败_scrapy框架运行

    pip安装scrapy失败_scrapy框架运行错误如图所示,running setup.py install for Twisted…..errorTwisted依赖库安装报错,重新下载手动安装一下下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs注意:看下安装的python是什么版本,我安装的python 3.9.0,就下载cp39,64位的下载安装的版本不对,就会报:Twisted-20.3.0-cp38-cp38-win_amd64.whl is not a support…

    2022年8月18日
    6
  • java培训学校杭州_杭州Java培训班

    java培训学校杭州_杭州Java培训班前言这段时间也一直在学习Netty相关知识,因为涉及知识点比较多,也走了不少弯路。目前网上关于Netty学习资料玲琅满目,不知如何下手,其实大家都是一样的,学习方法和技巧都是总结出来的,我们在没有找到很好的方法之前不如按部就班先从基础开始,一般从总分总的渐进方式,既观森林,又见草木。Netty是一款提供异步的、事件驱动的网络应用程序框架和工具,是基于NIO客户端、服务器端的编程框架。所以这里我们先以NIO和依赖相关的基础铺垫来进行剖析讲解,从而作为Netty学习之旅的一个开端。为什么学Java?Jav

    2022年10月3日
    0
  • 图像拼接——APAP算法[通俗易懂]

    图像拼接——APAP算法[通俗易懂]一、图像拼接技术1、基本介绍图像拼接是将同一场景的多个重叠图像拼接成较大的图像的一种方法,在医学成像、计算机视觉、卫星数据、军事目标自动识别等领域具有重要意义。图像拼接的输出是两个输入图像的并集。通常用到五个步骤:二、APAP算法1、…

    2022年9月22日
    0
  • Pycharm配置(1)——解释器(interpreter)「建议收藏」

    Pycharm配置(1)——解释器(interpreter)「建议收藏」今天导入模块,发现出了很多错,要升级pip,但是我发现在新建的工程项目(PycharmIDE)中有pip,而我安装的Python3中,也有pip,那我升级哪一个呢?1、首先,遇到的问题是:已经安装python,dos窗口却提示“python不是内部命令或外部命令,也不是可运行的程序”解决方案:点击打开链接2、发现两者都是一样的,都是解释器(ProjectInterpreter)的问题先说一下,…

    2022年8月29日
    1
  • 快速入门Layui

    快速入门Layui

    2021年10月7日
    125

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号