crash

2016-05-12  本文已影响62人  不拘小节123456

我们团队做了个小的科研型项目,用来保护iOS开发工程中的疏忽引起崩溃的情况。

使用简单,import头文件,在appdelegate中加一句代码即可。

目前只是基本常见情况的处理。希望可以帮助到大家,也希望高手们吐槽指正提出意见。

解决方案放在git上开源了:https://github.com/vipshop/VDM/tree/master

防止崩溃:

1、UIControl依赖的target对象被释放,UIControl继续响应设置给target的selector函数导致的crash

2、UITableView依赖的delegate、datasource对象被释放后,UITableView继续响应delegate和datasource函数导致的crash

3、UIScrollView依赖的delegate的对象被释放后,UIScrollView继续响应delegate函数导致的crash

4、UIPickView依赖的delegate、datasource对象被释放后,UITableView继续响应delegate和datasource函数导致的crash

5、UIGestureRecognizer依赖的target对象被释放后,UIGestureRecognizer继续响应设置给target的selector函数导致的crash

6、NSNotificationCenter向已经被释放的对象发送消息导致的crash

7、KVO的观察者observer被释放后value变化导致的crash

8、已释放对象调用延迟操作导致的crash

9、NSTimer的target对象被释放后,定时任务执行导致的crash

10、添加KVO重复添加观察者或重复移除观察者(KVO注册观察者与移除观察者不匹配)导致的crash

实现原理:

1、创建dependencyManager单例管理依赖工具

2、category系统的有依赖属性的对象,如:UIControl、UIScrollView、UITableView、UIPickerView、UIGestureRecognizer,NSTimer 在这些对象创建依赖时,将依赖关系以key-value的形式保存到我们的dependencyManager的单例中去

3、category IOS中被依赖的对象UIVIew、UIViewController,当被依赖对象释放时,dependencyManager讲与之关联的依赖控件或手势、通知移除。

上一篇下一篇

猜你喜欢

热点阅读