思路
在Swift的代码中,Controller没有销毁大部分的原因都是没有weak self。怎么检测一个Controller没有释放呢?
1、当一个对象销毁的时候,它会调用deinit的方法,一般Controller页面我们都是放在UINavigationController里面的,然后调用push和pop,实现我们页面的跳转。
2、继承UINavigationController,重写push方法,在push方法里面把push的controller的名字放到单例的数组里面,deinit的时候在把当前的controller从单例里面释放,然后检测单例里面有没有controller的相同名字存在2个以上的。
代码实现
因为是检测Controller有没有销毁的工具,然后打印到console里查看,所以代码应该在DEBUG模式下执行。
如果使用的UI架构师tabbar加几个controllers的样式,初始化tabbar的时候会调用push。所以判断如果是tabbarcontroller直接return
|
|
在继承的NavigationController实现push代码
在pop代码里调用数组的filter函数,过滤掉当前controller名字相同的内容,然后遍历数组,筛选出数组中名字相同有大于1个controller,并打印出来
|
|
在BaseController的deinit方法里实现我们的pop函数
由于我是tabba的ui架构,所以在点击tabbar的时候会push很多tabbar和navigation的controller。所以在点击和初始化的时候清空下我们的单例数组。
|
|
在tabbar里面的实现如下
初始化的时候清空
点击tabbar的时候清空
CheckWselfHelper.swift
https://gist.github.com/jackyshan/7a084291a03ae55815631697be1ae995