在C/S開發時,程序員常常會因爲粗心,或者服務端不經客戶端添加一些數據,若是代碼寫的不夠嚴謹,常常會出現數組訪問越界一類的崩潰,如何出現問題了,能夠不崩潰,只是進行上報,後臺收集到信息後利用JSPatch或者其餘工具進行修復.
git
這裏核心的就是一個方法程序員
OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
這裏有2個參數,2個要在運行時交換的方法.
github
Foundation框架裏objectAtIndex是不帶有越界檢測功能的,so,咱們能夠本身重寫objectAtIndex並實現越界檢測的功能.數組
- (instancetype)safe_objectAtIndex:(NSUInteger)index { if (self.count - 1 < index) { @try { return [self safe_objectAtIndex:index]; } @catch (NSException *exception) { NSLog(@"---------- %s Crash Because Method %s ----------\n", class_getName(self.class), __func__); NSLog(@"%@", [exception callStackSymbols]); return nil; } @finally { } } else { return [self safe_objectAtIndex:index]; } }
這裏實現一個safe_objectAtIndex,並對越界進行判斷.當catch到崩潰後,進行上報或者其它通知後臺的操做,這樣給用戶的體驗更好些,並且也能夠收集到咱們想要的崩潰信息了.框架
具體的實現見GitHub代碼工具