经验 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 alloc] initWithtitle: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模式。 有的话关掉  。这两个模式是冲突的。





上delloc 无呼叫 故障排除 笔记的更多相关文章

  1. 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除

    目录 学习笔记:CentOS7学习之十八:Linux系统启动原理及故障排除 18.1 centos6系统启动过程及相关配置文件 18.1.1 centos6系统启动过程 18.1.2 centos6启 ...

  2. 《DevOps故障排除:Linux服务器运维最佳实践》读书笔记

    首先,这本书是Linux.CN赠送的,多谢啦~ http://linux.cn/thread-12733-1-1.html http://linux.cn/thread-12754-1-1.html ...

  3. 第十篇 Replication:故障排除

    本篇文章是SQL Server Replication系列的第十篇,详细内容请参考原文. 复制故障排除是一项艰巨的任务.在任何复制设置中,都涉及到很多移动部件,而可用的工具并不总是很容易识别问题.Th ...

  4. 【译】第十篇 Replication:故障排除

    本篇文章是SQL Server Replication系列的第十篇,详细内容请参考原文. 复制故障排除是一项艰巨的任务.在任何复制设置中,都涉及到很多移动部件,而可用的工具并不总是很容易识别问题.Th ...

  5. atitit.故障排除--- 当前命令发生了严重错误。应放弃任何可能产生的结果sql server 2008

    atitit.故障排除--- 当前命令发生了严重错误.应放弃任何可能产生的结果sql server 2008 1. 现象 1 2. 原因:::sql server的bug 或者限制,查询的时候儿使用资 ...

  6. 1-19-1 RHEL6启动原理和故障排除

    大纲: 一.RHEL6系统启动原理 BIOS--->mbr--->bootloader--->内核--->init--->/etc/rc.d/rc.sysinit---& ...

  7. kubernetes 故障排除、处理、预防

    kubernetes 故障排除.处理.预防 故障排除顺序和思路 第一步: 我们可以通过查看节点是否正常,一是保证 K8S API Server 是正常的,二是可以查看节点集群网络中是否存在节点异常.如 ...

  8. 使用JDK工具进行Java服务器应用程序故障排除

    Java性能调优指南–有关提高Java代码性能的各种技巧. 最近又学到了很多新知识,感谢优锐课老师细致地讲解,这篇博客记录下自己所学所想. 1. 介绍 在Java世界中,我们大多数人习惯于在Java应 ...

  9. 理解 OpenStack + Ceph (7): Ceph 的基本操作和常见故障排除方法

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

随机推荐

  1. 关于Delphi XE2的FMX的一点点研究之消息篇

    Delphi XE2出来了一阵子了,里面比较抢眼的东西,除了VCLStyle这个换肤的东西之外,另外最让人眼亮的应该是FMX这个东西了.万一的博客上都连载了一票的关于FMX的使用心得了.我还是没咋去关 ...

  2. 用yum查询想安装的软件

    1.使用YUM查找软件包  命令:yum search~  2.列出所有可安装的软件包  命令:yum list  3.列出所有可更新的软件包  命令:yum list updates  4.列出所有 ...

  3. Jenkins: 使用Jenkins搭建持续集成(CI)环境

    http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 首先从官网http://jenkins-ci.org/下载 Java We ...

  4. Swift - 滑块(UISlider)的用法

    1,滑块的创建 1 2 3 4 5 6 var slider=UISlider(frame:CGRectMake(0,0,300,50)) slider.center=self.view.center ...

  5. Next-Key Locks

    Next-Key Locks 一个next-key lock 是 一个record lock 在index record 和 一个区间锁 在一个区间在index record之前 InnoDB 执行 ...

  6. spring开发基础

    Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...

  7. 指尖上的电商---(3)Solr全文搜索引擎的配置

    接上篇,Solr的准备工作完毕后,本节主要介绍Solr的安装,事实上Solr不须要安装.直接下载就能够了      1.Solr配置 下载地址 :http://lucene.apache.org/so ...

  8. codeforces 577

    codeforces 577A 题目链接:http://codeforces.com/problemset/problem/577/A 题目大意:给出一个n*n的表格,每个表格对应的值为横坐标*纵坐标 ...

  9. 设置Mysql的连接超时参数

     在Mysql的默认设置中,如果一个数据库连接超过8小时没有使用(闲置8小时,即   28800s),mysql server将主动断开这条连接,后续在该连接上进行的查询操作都将失败,将   出现:e ...

  10. struts2+jquery +json实现异步加载数据,亲测(原创)

    //初始加载页面时 $(document).ready(function(){ //为获取单个值的按钮注册鼠标单击事件 $("#getMessage").click(functio ...