? ? ? ? 上個(gè)月,公司新上線(xiàn)的APP捕捉到閃退問(wèn)題,而且頻率還挺高的,由于是一款供給自己公司內(nèi)部使用的APP,業(yè)務(wù)部門(mén)的同事反應(yīng)比較強(qiáng)烈,最終找到的解決問(wèn)題的方法很簡(jiǎn)單,但是真正值得一說(shuō)的,是尋找問(wèn)題的過(guò)程。
? ? ? ? 由于沒(méi)有iOS8的測(cè)試手機(jī),只能在xcode中下載的iOS8.1的模擬器,下圖是模擬器運(yùn)行后控制臺(tái)中展示的閃退錯(cuò)誤信息:

? ? ? ? 從圖上的截圖,我的第一反應(yīng)是,那個(gè)cell沒(méi)有定義好,導(dǎo)致了閃退,此后,我對(duì)相關(guān)的額控制器進(jìn)行了仔細(xì)的排查,但是排查完發(fā)現(xiàn),并沒(méi)有哪個(gè)cell沒(méi)有按步驟處理。此時(shí)想到,可以通過(guò)斷點(diǎn)的形式,找到出問(wèn)題的位置。。。。真是浪費(fèi)了不少時(shí)間。


在以上步驟完成之后,運(yùn)行APP,效果如下圖:

此時(shí),更是一頭霧水,這句每天都會(huì)寫(xiě)的代碼,怎么會(huì)有問(wèn)題。。。。
更神奇的是,注釋掉這句話(huà)之后,竟然可以完美運(yùn)行。。。。。。。傻眼
于是,開(kāi)始瘋狂百度。。。。這個(gè)不是。。。這個(gè)。。。不是。。。。這個(gè)。。。。不看了。。。百度的答案,貌似沒(méi)有第二個(gè)了。
此時(shí),想出的解決方案有兩個(gè):
第一:將cell重寫(xiě),不適用上面報(bào)錯(cuò)的代碼,但是內(nèi)心是多么的抗拒啊。。。這句代碼憑什么不能寫(xiě);
于是選擇第二方案:找到閃退原因。
于是有了這段定義tableView的代碼:

運(yùn)行。。。正常。。。
注釋掉一行之后運(yùn)行

運(yùn)行。。。。竟然是OK的。。。。瞎了
難道是tableFooterView造成的閃退?還是因?yàn)槲覜](méi)有設(shè)置frame造成的?
于是又嘗試了下面的情況:

還是閃退。。。
******于是,突然想到難道是初始化的順序?qū)е碌膯?wèn)題?

交換了兩個(gè)設(shè)置的順序,運(yùn)行。。。。。完美了。。。
最終找到問(wèn)題的解決方案盡然是separatorStyle的設(shè)置必須在tableFooterView、tableHeaderView之前。
當(dāng)然,這個(gè)問(wèn)題也只在iOS8上才會(huì)出現(xiàn),但是目前iOS8的市場(chǎng)保有量還是挺大的,應(yīng)該注意這個(gè)問(wèn)題。至于為什么會(huì)出現(xiàn)這個(gè)問(wèn)題,或者是iOS底層出現(xiàn)的什么問(wèn)題,暫未進(jìn)行過(guò)多的研究,歡迎指導(dǎo)的同學(xué)留言交流。
以上,只是個(gè)人對(duì)于遇到的這個(gè)問(wèn)題以及解決過(guò)程的簡(jiǎn)單記錄,希望能夠幫到遇到同樣問(wèn)題的同行們。
第一次發(fā),不喜勿怪,手下留情,謝謝!
-------------------更新 20171015----------------
二樓的小伙伴提供了新的解決辦法
“把separator放在cell的注冊(cè)之后,不管separator和tableFooterView的先后順序,就能順利執(zhí)行”
這個(gè)方案嘗試之后也是可以避免閃退發(fā)生的,但是原本提供的方法在哪個(gè)版本上仍然閃退還需要再次驗(yàn)證,尚未發(fā)現(xiàn)