程序崩潰-防止第三方庫-VDM

防止了哪下崩潰: 一、UIControl依賴的target對象被釋放,UIControl繼續響應設置給target的selector函數致使的crashapp

二、UITableView依賴的delegate、datasource對象被釋放後,UITableView繼續響應delegate和datasource函數致使的crashide

三、UIScrollView依賴的delegate的對象被釋放後,UIScrollView繼續響應delegate函數致使的crash函數

四、UIPickView依賴的delegate、datasource對象被釋放後,UITableView繼續響應delegate和datasource函數致使的crash工具

五、UIGestureRecognizer依賴的target對象被釋放後,UIGestureRecognizer繼續響應設置給target的selector函數致使的cras h 六、NSNotificationCenter向已經被釋放的對象發送消息致使的crashspa

七、KVO的觀察者observer被釋放後value變化致使的crashserver

八、已釋放對象調用延遲操做致使的crash對象

九、NSTimer的target對象被釋放後,定時任務執行致使的crashget

十、添加KVO重複添加觀察者或重複移除觀察者(KVO註冊觀察者與移除觀察者不匹配)致使的crashit

實現的大體原理:io

一、建立dependencyManager單例管理依賴工具

二、category系統的有依賴屬性的對象,如:UIControl、UIScrollView、UITableView、UIPickerView、UIGestureRecognizer,NSTimer 在這些對象建立依賴時,將依賴關係以key-value的形式保存到咱們的dependencyManager的單例中去

三、category IOS中被依賴的對象UIVIew、UIViewController,當被依賴對象釋放時,dependencyManager講與之關聯的依賴控件或手勢、通知移除

示例工程使用說明:

一、在程序啓動時調用

[[VSDependencyManager shareInstance] start]

示例crash點:

scrol下移除customview後,button點擊、scrollview滾動、tap頁面空白處

table下移除customview後,tableview滾動、點擊、點擊noti按鈕發送通知

picker下移除customview後,pickerview滾動、點擊、點擊kvo改變value值,屢次移除kvo的觀察者

customview開啓延時函數,並強制釋放後,延時函數執行

customview開啓定時任務,並強制釋放後,定時任務執行

二、用戶加入本身操做防止crash VDMTest-Prefix.pch文件下 加入

define USER_DEPENDENCY_SELF @"USER_DEPENDENCY_SELF"

註釋該行便可撤銷用戶本身操做

三、當程序不使用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了

相關文章
相關標籤/搜索