iOS8 iOS9.1 導航條push 后 pop返回崩潰

現(xiàn)在已經(jīng)iOS11宛琅,還要適配iOS8??
在其他手機上都正常道川,就在iOS8上各種崩潰,都是崩潰的main函數(shù)割择。

崩潰復現(xiàn)-崩潰log

演示步驟:從VC1 push到 VC2眷篇,返回VC1 ,崩潰荔泳〗侗或再想push到VC2,崩潰玛歌。
主頁有四個頁面昧港,報錯還各不相同。

報錯1
-[UITableView release]: message sent to deallocated instance 0x15ea3a400
報錯2
[MDWordCC release]: message sent to deallocated instance 0x145d62d40
報錯3
-[MDTipsViewController respondsToSelector:]: message sent to deallocated instance 0x1570d7650


崩潰的位置為
(anonymous namespace)::AutoreleasePoolPage::pop
Thread 35: EXC_BAD_ACCESS (code=1, address=0x10a054000)

崩潰到mian函數(shù)

崩潰復現(xiàn)-調(diào)試的設置

首先添加全局斷點

添加全局斷點


首先打開僵尸對象
崩潰事可以打印一行l(wèi)og Product --> Scheme --> Edit Scheme --> Diagnositics

僵尸對象設置

上面設置完成以后支子,可以驗證崩潰現(xiàn)象了创肥,必現(xiàn)。

網(wǎng)上的答案

答案1 -- 對我無用
malloc_history查看系統(tǒng)的崩潰堆棧信息
sudo malloc_history 36674 0x7f906ca34790
但是 必須在模擬器上運行值朋,但是我們項目因為添加了三方模塊叹侄,用不了模擬器。


答案2 -- 對我有用
dealloc中清空代理 deleagate = nil


答案3 -- 對我有用
設置文件 -fno-objc-arc 這個有作用昨登,讓我很是稀奇??


答案4 -- 對我無用
重寫導航控制器的pop和push方法趾代,判斷是否有動畫結束或多次pop等等。

我解決的方案

第一次-- 用了答案3
設置VC2文件 為-fno-objc-arc
報錯丰辣,然后刪除了里面的所有 weakself
運行正常撒强,能解決這個單文件的問題,pop出來不崩潰了笙什。
但是其他的頁面pop依然崩潰飘哨。
并且都用ARC了,這樣搞得湘,總感覺有點別別的??
但是的確有用杖玲,至于原理顿仇,不清楚淘正。摆马。。


第二次-- 用了答案2
把VC2的所有代理在dealloc都置空鸿吆。
依然崩潰囤采。

最終解決方案
分成兩步:
第1步,把VC2的所有代理在dealloc都置空惩淳。

清空代理

第2步蕉毯,發(fā)現(xiàn)項目中有個類 NSObject+MDKVO.m
這個類應該是防止KVO多次添加或多次移除的。
把這個類代碼都刪除了
解決成功

分析原因

1 代理在dealloc中都應該置空思犁,不然在iOS8和9會出問題代虾,在iOS10和11 上沒有問題。
2 如果即使加全局斷點激蹲,依然崩潰在mian函數(shù)棉磨,很有可能是三個原因??????????????:
1,KVO
2学辱,KVC
3乘瓤,手勢,特別是添加到Window的上手勢

后續(xù)--非相關

在另一個頁面返回也會崩潰策泣,報錯內(nèi)容為
libc++abi.dylib: terminate_handler unexpectedly threw an exception
這個先記著衙傀,等后續(xù)再補。


后續(xù)--非相關 已解決

還是KVO的問題
在setModel 的時候萨咕,多次添加了KVO
開始是沒有問題的统抬,但是后來因為我把 NSObject+MDKVO.m文件代碼刪除了,所以又出現(xiàn)了這個問題危队。


解決方案
用FaceBook的 KVOController 三方框架
#import <KVOController/NSObject+FBKVOController.h>
相關代碼如下??

// 去掉原生的KVO代碼
//- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
//{
//    if ([keyPath isEqualToString:@"viewModel.isRead"]) {
//        if (self.viewModel) {
//            if ([change[NSKeyValueChangeNewKey] intValue] == 0) {
//                self.wordLabel.textColor = color6;
//                self.spellLabel.textColor = color8;
//            } else {
//                self.wordLabel.textColor = color1;
//                self.spellLabel.textColor = color1;
//            }
//        }
//    }
//}

- (void)dealloc
{
// 去掉原生的KVO代碼
//    if (self.viewModel.indexPath) {
//        [self removeObserver:self forKeyPath:@"viewModel.isRead"];
//    }
}

- (void)setViewModel:(MDWordViewModel *)viewModel
{
    
    _viewModel = viewModel;
    if (viewModel.indexPath) {
 //       去掉原生的KVO
//        [self addObserver:self forKeyPath:@"viewModel.isRead" options:NSKeyValueObservingOptionNew context:nil];

 //       添加KVOController 的 KVO
        MJWeakSelf
        [self.KVOController observe:self.viewModel keyPath:@"isRead" options:NSKeyValueObservingOptionNew block:^(id  _Nullable observer, id  _Nonnull object, NSDictionary<NSString *,id> * _Nonnull change) {
            
            if (weakSelf.viewModel) {
                if ([change[NSKeyValueChangeNewKey] intValue] == 0) {
                    weakSelf.wordLabel.textColor = color6;
                    weakSelf.spellLabel.textColor = color8;
                } else {
                    weakSelf.wordLabel.textColor = color1;
                    weakSelf.spellLabel.textColor = color1;
                }
            }
        }];
        
    }

后續(xù)相關:血的教訓

上面的bug解決以后蓄喇,我在測試其他頁面的時候,有一個頁面交掏,進去以后pop出來就崩潰
周日加班妆偏,從早晨調(diào)試到凌晨,這個bug死活被找到原因
報的錯為
core::supernode::HttpDownloader(533)::[conf::query]Request ur
Enqueued from com.apple.main-thread
malloc: can't protect region for postlude guard page


后來想到文章開頭的僵尸對象設置盅弛,然后就把設置關閉了钱骂,發(fā)現(xiàn)就不再崩潰了。我了擦啊啊啊啊啊??????
關閉僵尸對象
Product --> Scheme --> Edit Scheme --> Diagnositics

還是用了上圖挪鹏,就不截圖的见秽,記住這5個箭頭指向的對勾都要關閉

記住調(diào)試完成以后,一定要把這5個箭頭指向的對勾都要關掉
記住調(diào)試完成以后讨盒,一定要把這5個箭頭指向的對勾都要關掉
記住調(diào)試完成以后解取,一定要把這5個箭頭指向的對勾都要關掉

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市返顺,隨后出現(xiàn)的幾起案子禀苦,更是在濱河造成了極大的恐慌蔓肯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件振乏,死亡現(xiàn)場離奇詭異蔗包,居然都是意外死亡,警方通過查閱死者的電腦和手機慧邮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門调限,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人误澳,你說我怎么就攤上這事耻矮。” “怎么了忆谓?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵淘钟,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么击蹲? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮铁瞒,結果婚禮上,老公的妹妹穿的比我還像新娘桅滋。我一直安慰自己慧耍,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布丐谋。 她就那樣靜靜地躺著芍碧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪号俐。 梳的紋絲不亂的頭發(fā)上泌豆,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音吏饿,去河邊找鬼踪危。 笑死,一個胖子當著我的面吹牛猪落,可吹牛的內(nèi)容都是我干的贞远。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笨忌,長吁一口氣:“原來是場噩夢啊……” “哼蓝仲!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袱结,失蹤者是張志新(化名)和其女友劉穎亮隙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擎勘,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年颖榜,在試婚紗的時候發(fā)現(xiàn)自己被綠了棚饵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡掩完,死狀恐怖噪漾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情且蓬,我是刑警寧澤欣硼,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站恶阴,受9級特大地震影響诈胜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冯事,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一焦匈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昵仅,春花似錦缓熟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吕世,卻和暖如春彰触,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背命辖。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工渴析, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吮龄。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓俭茧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漓帚。 傳聞我的和親對象是個殘疾皇子母债,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354