tableView 滑動(dòng)時(shí)為什么出現(xiàn)卡頓
tableView 滑動(dòng)卡的問(wèn)題主要是因?yàn)椋?從緩存中或者是從本地讀取圖片給UIImage的時(shí)候耗費(fèi)的時(shí)間偎漫。
需要把下面的兩句話放到子線程里面:
NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:app.icon]]; //得到圖像數(shù)據(jù)
UIImage *image = [UIImage imageWithData:imgData];
把UIImage賦值給圖片的時(shí)候在主線程躬审。
子線程不能更新UI 所有的UI跟新都是主線程執(zhí)行了打月。
手指滑動(dòng)屏幕了。
或者屏幕的某個(gè)方法執(zhí)行了稼稿。
子線程里面加入NSTimer 的時(shí)候需要 手動(dòng)添加NSRunloop 否則不能循環(huán)。
怎么在IOS代碼中找bug
1. 優(yōu)先解決那些可重現(xiàn)的,可重現(xiàn)的bug特別好找乏屯,反復(fù)調(diào)試測(cè)試就好了,先把好解決的干掉瘦赫,這樣最節(jié)約時(shí)間辰晕。
2. 對(duì)于某些bug沒(méi)有頭緒或者現(xiàn)象古怪不知道從哪里下手,找有經(jīng)驗(yàn)的同事問(wèn)一下思路确虱,因?yàn)樵谀欠N開(kāi)發(fā)多年的大型系統(tǒng)里伞芹,經(jīng)常會(huì)反復(fù)出現(xiàn)同樣原因的bug,原因都類似蝉娜,改了一處唱较,過(guò)一陣子另外一處又冒出來(lái),而且無(wú)法根治召川。
比如:我那個(gè)系統(tǒng)里有個(gè)特別危險(xiǎn)的API南缓,接口參數(shù)比較難用,一旦有人用錯(cuò)了某些情況下就會(huì)出詭異的現(xiàn)象荧呐,解決很簡(jiǎn)單汉形,找到調(diào)用這個(gè)API的地方把調(diào)用方式寫(xiě)對(duì)就好了。
為什么不根治呢倍阐?因?yàn)橐3旨嫒菪圆荒芨慕涌诹烁沤indows系統(tǒng)里就好多這種爛API。
問(wèn)下老員工吧峰搪,說(shuō)不定他們都遇到過(guò)好多次了岔冀。
3. 放大現(xiàn)象,有些bug現(xiàn)象不太明顯概耻,那么就想辦法增大它的破壞性使套,把現(xiàn)象放大。
這只是個(gè)思路鞠柄,具體怎么放大只能根據(jù)具體的代碼來(lái)定侦高。
比如:美劇《豪斯醫(yī)生》里有一集,懷疑病人心肺有問(wèn)題厌杜,就讓病人去跑步機(jī)上跑步奉呛,加重心肺負(fù)擔(dān),從而放大癥狀。
4. 二分法定位瞧壮,把程序邏輯一點(diǎn)點(diǎn)注釋掉登馒,看看還會(huì)不會(huì)出問(wèn)題,類似二分查找的方法馁痴,逐步縮小問(wèn)題范圍谊娇。
5. 模擬現(xiàn)場(chǎng),有時(shí)候我會(huì)問(wèn)自己罗晕,如果我要實(shí)現(xiàn)bug描述的現(xiàn)象我要怎么寫(xiě)代碼才行济欢?
比如:我遇到一個(gè)死鎖問(wèn)題,但是檢查代碼發(fā)現(xiàn)所有的鎖都是配對(duì)的小渊,沒(méi)有忘記解鎖的地方法褥,而且鎖很簡(jiǎn)單就是一個(gè)普通的臨界段,保護(hù)幾行賦值語(yǔ)句而已酬屉。
這樣的代碼怎么寫(xiě)才能讓他死鎖呢半等?
我想如果讓我故意制造這樣一個(gè)現(xiàn)象,只有在上鎖的時(shí)候強(qiáng)制殺掉線程了呐萨。
既然這樣就可以去看看有誰(shuí)強(qiáng)殺線程了沒(méi)有杀饵。
6. 制作工具,針對(duì)某些bug編寫(xiě)一些調(diào)試輔助工具谬擦。
比如切距,我那個(gè)系統(tǒng)沒(méi)有完善的崩潰報(bào)告,雖然也有dump惨远,但是分析出來(lái)的callstack經(jīng)常不準(zhǔn)谜悟。
于是我為解決崩潰問(wèn)題編寫(xiě)了個(gè)工具,會(huì)自動(dòng)掃描代碼北秽,在每個(gè)函數(shù)入口和出口插入log葡幸,以此來(lái)定位崩潰點(diǎn)。
7. 掩蓋問(wèn)題贺氓,雖然這樣做有點(diǎn)不厚道蔚叨,但是有時(shí)不得不這么做。
有些bug找不到真正的root cause掠归,但是又要在規(guī)定時(shí)間內(nèi)解決缅叠,那么我們就可以治療癥狀而不去找病因。
比如用try catch掩蓋一些奇怪的崩潰虏冻。
不到萬(wàn)不得已不要這么干,未來(lái)可能會(huì)付出更大代價(jià)弹囚。
# 持續(xù)更新中厨相。。。 可留言蛮穿。庶骄。。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者