Method Swizzling 处理一类简单的崩溃
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
????在C/S開發(fā)時(shí),程序員經(jīng)常會(huì)由于粗心,或者服務(wù)端不經(jīng)客戶端添加一些數(shù)據(jù),如果代碼寫的不夠嚴(yán)謹(jǐn),經(jīng)常會(huì)出現(xiàn)數(shù)組訪問越界一類的崩潰,如何出現(xiàn)問題了,可以不崩潰,只是進(jìn)行上報(bào),后臺(tái)收集到信息后利用JSPatch或者其他工具進(jìn)行修復(fù).
????這里核心的就是一個(gè)方法
OBJC_EXPORT?void?method_exchangeImplementations(Method?m1,?Method?m2)?__OSX_AVAILABLE_STARTING(__MAC_10_5,?__IPHONE_2_0);這里有2個(gè)參數(shù),2個(gè)要在運(yùn)行時(shí)交換的方法.
Foundation框架里objectAtIndex是不帶有越界檢測(cè)功能的,so,我們可以自己重寫objectAtIndex并實(shí)現(xiàn)越界檢測(cè)的功能.
-?(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];}}這里實(shí)現(xiàn)一個(gè)safe_objectAtIndex,并對(duì)越界進(jìn)行判斷.當(dāng)catch到崩潰后,進(jìn)行上報(bào)或者其它通知后臺(tái)的操作,這樣給用戶的體驗(yàn)更好些,而且也可以收集到我們想要的崩潰信息了.
具體的實(shí)現(xiàn)見GitHub代碼
轉(zhuǎn)載于:https://my.oschina.net/u/2435827/blog/616053
總結(jié)
以上是生活随笔為你收集整理的Method Swizzling 处理一类简单的崩溃的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘹亮歌声教案一等奖
- 下一篇: 400字读后感大全30篇