上delloc 无呼叫 故障排除 笔记

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

时间: 2024-10-23 07:35:37

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

Cisco故障排除笔记

cisco的生命周期:准备.规划.设计.实施.运行.优化故障管理配置管理记账管理性能管理安全管理 logging console warnings 只有4级以下的日志消息显示到控制台上,默认情况下记录所有日志信息 排除故障:1.定义故障  2.信息收集  3.分析信息 4.推断故障原因 5.排除潜在的故障原因 6.验证  7.排除故障分类 询问信息  证实 上报 协调 更新 报告 排除故障方式:1.自顶而下法 2.自底而上法 3.分而治之法 4.跟踪流量路径法  5.对比配置法 6.组件替换法

HCNP学习笔记之OSPF协议原理及配置9-OSPF故障排除

如何去定位故障的原因以及准确的排除故障,都需要建立在对协议运作非常了解的基础上. 本文就是介绍OSPF故障排除的思路和操作. 用到的命令: display ip routing-table //先看路由,确定故障位置 display ospf peer      // 根据邻居关系,进一步确定故障点 display ospf error     // 华为,华3路由器专有,思科不支持,很强大 display current-configuration   //不推荐用,现网中配置数据量很大 di

故障现象:Win7 访问共享时输入正确密码仍然提示密码错误,此帐号在其它机器上可以正常使用,排除帐号密码不对导致的问题。

解决方案一 安装win7的机器日期不对,调整后故障排除. 解决方案二 1.直接按下win+r键,输入secpol.msc,打开本地安全策略.2.找到"安全设置"的"本地策略"的"安全选项"3.在右边一栏找到"网络安全:LAN管理器身份验证级别",双击进入4.在默认状态选项下,英文版应该为"no defined",中文版为空.下拉那个默认选项,选择"仅发送NTLM响应"重启后故障排除. 故

马哥笔记第十六天故障排除、trap、sed、awk、bash数组、bash字符串操作

A.故障排除:             紧急救援模式:rescue,相当于一个小型的linux系统和让你切换到硬盘系统中. 1.grub损坏:                         谨慎操作 dd  if=/dev/zero of=/dev/sda count=1 bs=400   不能大于446,否则破坏分区表中数据.这时需要进入救援模式,选择Rescue installed system,选择语言.键盘设置.是否启用网络.继续continue.选择启动shell.使用chroot

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

大纲: 一.RHEL6系统启动原理 BIOS--->mbr--->bootloader--->内核--->init--->/etc/rc.d/rc.sysinit--->/etc/rc.d/rc[0-6].d--->/etc/rc.d/rc.local--->/bin/login 二.启动故障排除 1.防止恶意破解root密码(grub加密) 2.系统崩溃后,如何备份数据到U盘(救援模式) 3.inode结点满了怎么办 4.双系统,更新grub ======

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

atitit.故障排除--- 当前命令发生了严重错误.应放弃任何可能产生的结果sql server 2008 1. 现象 1 2. 原因:::sql server的bug 或者限制,查询的时候儿使用资源太多超过操作系统/防火墙/安全软件的限制... 2 2.1. 防火墙/安全软件的原因:自动关闭了长时连接and 资源多的连接.. 2 2.2. 并发连接数超过了其承载量,服务器会将其中一些连接Down掉: 2 3. 解决之道:: 2 3.1. 打补丁sp 2 3.2. 使用top n /where

RHEL6启动原理和故障排除

1.1-Linux启动过程详解 1.2-常见的启动故障排除                  1.2-1 实战-防止黑客破解root密码                  1.2-2 实战-服务器挂机,转移数据                  1.2-3 实战-修复磁盘I节点耗尽                  1.2-4 实战-磁盘坏道检测 一 .Linux启动过程详解 其实就是转交系统控制权的过程 Linux操作系统的引导过程中一般包括一下几个步骤 开机自检àMBR引导àGRUB菜单à加

OpenStack服务启动故障排除经验

今天同事在配置OpenStack的计算节点(在CentOS 7上部署)时遇到一个问题,发现在控制节点上运行nova service-list发现只有4行,没有nova-compute service,让我帮他排查. 提前透露原因:这位同事在/etc/nova/nova.conf配置文件中verbose = True 写成了 verbose =Ture,我也是检查了半天(两眼对了3遍)没看出来,有点汗! 根据我以前掌握的经验,OpenStack的部署过程遇到的问题可归纳总结为配置文件问题.配置步骤

VMware Horizon view桌面虚拟化技术咨询、故障排除、项目实施、安装部署

我们可以承接 [VMware Horizon view桌面虚拟化技术咨询.故障排除.项目实施远程安装部署]. 我们是VMware授权合作伙伴代理商企业认证,专做VMware虚拟化项目,线上实施(技术咨询.故障排除.项目实施). 项目收费标准: VMware Horizon view桌面虚拟化技术咨询.故障排除.项目实施远程安装部署 序号 项目名称(远程协助) 需要时间范围 业务数据 序列号授权 需要费用 3 Horizon view桌面虚拟化部署项目实施不包括ESXi 和 vCenter 集群基