引子
在做一個(gè)開屏廣告的時(shí)候,廣告沒有顯示出來肮砾,卻讓app直接卡在主界面不能動(dòng)彈诀黍。我就拉取了一下開屏廣告嘛,至于 嘛仗处。
分析
抱怨歸抱怨眯勾,分析還是要分析的。屏幕卡屏的原因一般有以下幾種:
1婆誓、有一個(gè)透明的View在app上吃环。
2、主程序有耗時(shí)操作且尚未執(zhí)行結(jié)束洋幻。
3郁轻、主線程死鎖。
第一點(diǎn)鞋屈,可以直接通過Xcode的工具Debug View Hierarchy 查看范咨,并沒有多余的View,這個(gè)就可以排除了厂庇。接著來測試第二點(diǎn)渠啊,主線程有耗時(shí)操作且尚未執(zhí)行結(jié)束。 因?yàn)轫?xiàng)目新開發(fā)SDK的配套Demo权旷,并沒有過多的耗時(shí)操作替蛉。無非就是從網(wǎng)絡(luò)拉取開屏廣告數(shù)據(jù)的時(shí)候可能有耗時(shí)贯溅,雖然在主線程做法欠妥當(dāng),但是總有執(zhí)行完的時(shí)候躲查。等等它浅,就在我這樣想的時(shí)候,突然镣煮,發(fā)現(xiàn)姐霍,這個(gè)網(wǎng)絡(luò)請求根本就沒進(jìn)去,這是什么鬼...于是乎典唇,就開始打斷點(diǎn)了镊折,最后發(fā)現(xiàn)在用AFNetworking中的Reachability獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)的時(shí)候,出現(xiàn)了問題介衔。其實(shí)用這個(gè)方法獲取網(wǎng)絡(luò)狀態(tài)本身是沒有問題的恨胚,可是,我在網(wǎng)絡(luò)請求之前要傳這個(gè)參數(shù)炎咖,要把這個(gè)異步方法弄成同步到 赃泡,我是這樣做的:
這里找時(shí)間細(xì)說传藏,這段代碼本身沒什么毛病卓箫,發(fā)現(xiàn)居然就沒有返回匾委?經(jīng)過閱讀源碼:
哦原來留拾,你是從主線程進(jìn)行返回的,這個(gè)方法我也是在主線程調(diào)用的髓窜,不好意思挟憔,我在等你,你在等我~~~
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
好了阴幌,原因找到了,解決方法~~~
結(jié)語
遇到問題卷中,分析原因矛双,尋找根本原因。解決掉蟆豫,總結(jié)议忽。