Method Swizzling 處理一類簡單的崩潰

    在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代碼工具

相關文章
相關標籤/搜索