記錄最近業務中出現的兩個問題

因為https://blog.csdn.net/urdfmqcul2/article/details/78788962
,博客搬家至https://juejin.im/user/59fd6315f265da4321536990

兩個問題都出現在iOS 9上,用戶比例大概是在10%左右,還是占了比較大的比例,但我們平時開發所使用的測試機和模擬器都是iOS 10,同時這兩個問題出現的場景需要較多的條件,于是問題就這么漏過去了。

1.TTTAttributedLabel的text中包含emoji會引發內存溢出.

https://github.com/TTTAttributedLabel/TTTAttributedLabel/issues/601

上面是這個問題的issue,具體就不分析了,解決辦法和原因都在issue里,只是發現這個問題的過程實在太過曲折——運營那邊不停在向我們抱怨用戶反饋crash,可是fabric上真的干凈得如一張白紙(其實也不太干凈)啊。

2.UICollectionView dataSource is not set.

iOS9中,UICollectionView removeFromSuperView時,會調用DataSource中的一些方法,此時如果DataSource已經釋放,就會出現上圖中的crash。iOS 10中UIKit中對這部分邏輯做了改動,因此不會crash了。

而造成DataSource會被提前釋放的很大可能原因就是,在構造UICollectionView的實例時,UICollectionView的superView與DataSource生命周期不一致。舉例說:在A類中創建了UICollectionView和BView的實例,同時把UICollectionView加入了BView的subviews,但是DataSource設置為了A類,如果A的生命周期比BView要長,那就不會有問題,但是如果A在BView前先被析構了,就會引發crash。

解決辦法,在A的dealloc中將UICollectionView提前removeFromSuperView。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容