iOS開發實戰小知識 (十二)—— layoutIfNeeded Crash

在iOS 10~ 11系統上,莫名其妙發現一個crash, iOS 12系統沒事(iOS 12系統作了優化麼?)。 定位發現是[self layoutIfNeeded]崩潰到這句代碼上。xcode

緣由: layoutIfNeeded 方法必須在主線程執行。

因此對UIView 的setNeedsLayout,layoutIfNeeded,layoutSubviews,setNeedsUpdateConstraints方法執行要在主線程,不在主線程的要dispatch到主線程執行bash

dispatch_async(dispatch_get_main_queue(), ^{ 
        [self layoutIfNeeded];
        });
複製代碼

查找過程

1.運行程序,界面卡死,而後點擊xcode上 async

點擊xcode.png
2.在控制檯輸入:bt,查看堆棧信息
在控制檯打印堆棧信息.png
3.也能夠直接在xcode上查看堆棧信息
也能夠在xcode直接看堆棧信息.png
4.根據打印出的堆棧信息,定位到問題點
定位到問題點.png
5.修復。 將[self layoutIfNeeded]; 放到主線程更新解決。

小tips

xcode裏模糊搜索方法 正則匹配搜索方法 eg:搜索gearbest 優化

所有gearbest.png
結果:

加正則匹配搜索: spa

第一步.png
正則匹配表達.png
以後的搜索結果.png
相關文章
相關標籤/搜索