上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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 钓鱼网站盗QQ_qq看别人的空间一定会被别人知道吗

    钓鱼网站盗QQ_qq看别人的空间一定会被别人知道吗刚刚打开手机tim看到QQ空间有留言下面一个截图的东西(别扫进去输自己的账号密码哈,看看就得了,典型的钓鱼网站)貌似在前几年就有此类网站,不过现在高级了些,下面就由图图来分析一下原理是什么鬼(毫无技术含量)大神快点绕道!!!首先看到这个图片而写是熟人给你留言的,并且还是以好友备注的名字进行留言“XXX,我们合影的照片都在这里了你太好笑了照片呆呆的,长摁识别”会有这么一句话,好奇心强的都会点进去看~【为什么要搞这种二维码呢?就是为了不让一些在线解码的网站轻易识别反而只有QQ、微信可…

    2022年8月24日
    6
  • 俞敏洪沉默,新东方落泪

    俞敏洪沉默,新东方落泪据传,早些年以新东方三位创始人创业为主线故事,风靡一时的电影《中国合伙人》开拍前,剧组曾向电影男主角的原型人物俞敏洪,提出了友好交流的请求。俞敏洪提出最大的意见是:可不可以别把我拍得这么“土鳖”?几十年来,号称农村出身的寒门子弟俞敏洪,其身份发生了重大变化。在公开场合里,他对自己的身世表露出深深的自卑。另一方面,他又被誉为中国留学教父,俨然成为一个农村“凤凰男”逆袭成精英阶级的典型代表。当然,俞敏洪还是新东方的创始人,中国商业洪流里响当当的传奇。“我吃一碗兰州拉面都很开心”。可就是这样一个人,对财

    2025年11月7日
    4
  • Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)[通俗易懂]

    Markdown (CSDN) MD编辑器(二)- 文本样式(更改字体、字体大小、字体颜色、加粗、斜体、高亮、删除线)[通俗易懂]介绍使用markdown编辑器时,利用html的font、mark、strong、em、del、big、small等标签改变文本的颜色、字体、字体大小、加粗字体、斜体、高亮等

    2022年9月23日
    2
  • .net类的初始化机制,顺序,内存分配,

    .net类的初始化机制,顺序,内存分配,

    2022年3月11日
    36
  • telnet 命令参数及其应用方式[通俗易懂]

    telnet 命令参数及其应用方式[通俗易懂]1.了解telnet命令的语法和参数;2.掌握telnet的常见应用方法。

    2022年9月23日
    3
  • 线程池源码分析_executors源码解析

    线程池源码分析_executors源码解析概述在java中,线程池ThreadPoolExecutor是一个绕不过去的类,它是享元模式思想的体现,通过在容器中创建一定数量的线程加以重复利用,从而避免频繁创建线程带来的额外开销。一个设

    2022年8月16日
    28

发表回复

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

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