關於ios使用執行緒導致程式不規律的閃退問題解決
阿新 • • 發佈:2019-01-02
之前自己寫的一個小專案,使用支執行緒的目的就是為了一些運算 或者伺服器間的互動。
[NSThreaddetachNewThreadSelector:@selector(setLoadData)toTarget:selfwithObject:nil];
開啟一個執行緒,方法是setLoadData,主要是去伺服器那邊請求資料。獲取資料之後通知主執行緒解析資料,方法是[selfperformSelectorOnMainThread:@selector(parseTheData:)withObject:sizeData waitUntilDone:YES];
在parseTheData裡面是具體的解析方法。SVProgressHUD開源類庫,大家都稱它為小菊花。
為了在請求資料的過程就顯示小菊花,就是“正在載入”,我在支執行緒裡面使用了,
[SVProgressHUDshowWithStatus:@"載入中..."maskType:SVProgressHUDMaskTypeClear];
結果程式不一定每次都閃退,但是有時候操作快了,就會出現閃退。
原因我覺得是:只有主執行緒才能控制view的變化,會導致資源搶奪 死鎖的。
解決方法:將[SVProgressHUDshowWithStatus:@"載入中..."maskType:SVProgressHUDMaskTypeClear];寫線上程發起的前面。
問題二:
關於在主執行緒裡宣告的陣列空間,我在支執行緒中
removeAllObjects
起初還是正常的,但是在不管的請求資料的過程就,發現程式會不規律的閃退,這讓我蛋疼~
後來我通知主執行緒去removeAllObjects,問題就解決了。
原因:支執行緒別去用主執行緒的資料 最好,使用的話 也傳入複製使用為好。這樣會導致資源搶奪,死鎖,程式閃退。
以上是自己記錄,如果有什麼錯誤,請大神們指出。