为什么80%的码农都做不了架构师?>>>   

防止了哪下崩溃: 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函数导致的cras h 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讲与之关联的依赖控件或手势、通知移除

示例工程使用说明:

1、在程序启动时调用

[[VSDependencyManager shareInstance] start]

示例crash点:

scrol下移除customview后,button点击、scrollview滚动、tap页面空白处

table下移除customview后,tableview滚动、点击、点击noti按钮发送通知

picker下移除customview后,pickerview滚动、点击、点击kvo改变value值,多次移除kvo的观察者

customview开启延时函数,并强制释放后,延时函数执行

customview开启定时任务,并强制释放后,定时任务执行

2、用户加入自己操作防止crash VDMTest-Prefix.pch文件下 加入

define USER_DEPENDENCY_SELF @"USER_DEPENDENCY_SELF"

注释该行即可撤销用户自己操作

3、当程序不使用dependency管理工具,用户自己也不进行依赖解除,crash点都会崩溃 当程序使用dependency管理工作或者用户自行解除依赖,以上crash点均不会crash 所以用户在自行处理的情况下依然可以使用dependency管理工作,操作不会有任何影响

其他工程嵌入:(dependency工具包支持arc和非arc模式,不需要工程配置)

将VDM文件夹直接拖到新的工程中,复制并加入工程

引入头文件

import "VSDependencyCommon.h"

到APPDelegate.m文件

程序启动时,启动dependency单例

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [[VSDependencyManager shareInstance] start]; return YES;; }

使用方法 就是 加入头文件 就OK了

转载于:https://my.oschina.net/rainwz/blog/493446

程序崩溃-防止第三方库-VDM相关推荐

  1. Python_note8 程序设计方法学+Python第三方库安装+os库

    实例13 体育竞技分析 自顶向下,解决复杂问题的有效方法,将一个小问题表达为若干小问题组成的形式,使用同样方法进一步解决小问题直至可以用计算机简单解决:自底向上 理解自顶向下的设计思维:分而治之:理解 ...

  2. 微信小程序可用的第三方库

    1.wxDraw 轻量的小程序canvas动画库,专门用于处理小程序上canvas 的图形创建.图形动画,以及交互问题. 链接:http://project.ueflat.xyz/#/ 2.ZanUi ...

  3. python批量安装第三方库_使用Python批量安装第三方库

    Python的很多功能通过第三方库实现,99%的第三方库可以通过Python自带的pip方法进行自动下载和安装.然而Python有几十万个第三方库,最常用的也有几十个.想要一次性地安装几十个常用的第三 ...

  4. python第三方库批量安装_使用Python批量安装第三方库

    Python的很多功能通过第三方库实现,99%的第三方库可以通过Python自带的pip方法进行自动下载和安装.然而Python有几十万个第三方库,最常用的也有几十个.想要一次性地安装几十个常用的第三 ...

  5. 脚本程序转变为可执行程序的第三方库——pyinstaller

    **PyInstaller**是一个十分神奇的第三方库,它能够在Windows.Linux. Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没 ...

  6. mac用什么写python程序_mac下的应用程序发布 及 打包(Python写的脚本,可打包第三方库)...

    其实这个问题在网上能搜到大把的解决方案.大家的统一答案都是 otool -L yourapp.app/Contents/MacOS/yourapp 根据输出信息在运行 install_name_too ...

  7. (转)CocoaPods:管理Objective-c 程序中各种第三方开源库关联

    在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...

  8. java 把string转为keyevent_盘点现在Java强大第三方库(字符串操作),程序员都该知道!...

    1.字符串与集合间的转化 引用第三方库 Apache Commons Lang jre连接 值得一提的自JDK1.8以后字符串集合转为字符串可以使用String类下的join()方法,但别的数据类型还 ...

  9. python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢

    很多时候我们都会有一个麻烦事,就是打开pycharm或者VScode等的时候,都有可能因为自己电脑上面安装的第三方模块过多,导致电脑很卡,风扇转速不停地增加,这时候我们就会想去卸载一些不太用得着的第三 ...

最新文章

  1. 设计模式------工厂方法模式
  2. 批量启动关闭MS SQL 2005服务BAT
  3. 05,pytorch_手写数字案例
  4. webpack打包器小结(1)
  5. 面试中的小知识(网络 以及 测试)
  6. js获取html5 audio 音频时长方法
  7. 在线安装Eclipse插件时,出现错误
  8. 发那可g10_fanuc系统中的G10格式会根据输入的数据不同而不同
  9. 《恋爱通告》8月12上映 海报预告片齐亮相
  10. wifi物理地址怎么改_怎么修改手机的物理地址
  11. 基于K-Means的银行客户数据集分析与处理
  12. linux之mysql基础
  13. 正则表达式 取最后一个 . 然后进行匹配
  14. 微信小程序上传图片 预览 删除
  15. 史玉柱的团队管理之道
  16. RTFNet——用于城市场景语义分割的RGB和热红外融合网络
  17. android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating
  18. 前端标注工具标你妹啊与马克鳗小对比
  19. python网页查询然后返回结果_python(30) 获取网页返回的状态码,状态码对应问题查询...
  20. 干眼症产品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 【Android 10 源码】深入理解 MediaCodec 组件分配
  2. 射线p0-p1相对于Y轴负向顺时针旋转角度
  3. 手机邮箱收不到验证邮件怎么办,分享邮箱没有收到验证邮件的解决办法
  4. 上市公司股权激励的改进建议
  5. 7.3联盟最多的服务器,魔兽世界人口普查:联盟人类增多
  6. php获得视频分辨率,如何通过视频画面剪切得到特定分辨率的视频文件
  7. 想研究下如何购买婴儿保险?
  8. 小司机带你优雅的实现AOP,IOC
  9. 微星冲锋坦克2pro gp76和gp75有什么区别 哪个好 详细配置对比
  10. 移动互联网思维(持续更新)