簡單上代碼吧。
我在更新UIView時候需要先將其中已經存在的一些移除掉
if ([NSThread currentThread] == [NSThread mainThread]){
NSLog(@"before remove:%ld", [[self subviews] count]);
[Helper removeAllSubViews:self];
NSLog(@"after remove:%ld", [[self subviews] count]);
}
Helper removeAllSubViews我就不貼代碼了,很簡單,獲取view的subviews,用foreach遍歷然後調用removeFromSuperview而已。
很明顯我這裡確定了這段代碼是主線程運行的,但是這樣執行仍然沒有效果。假如移除之前是4個subview,移除之後還是4個。然後我發現不斷更新過程中subview越來越多(每次累計的,沒有清除掉之前的),而且由於之前的沒有清空成功,全部疊加一起顯示特別亂套。
我還特別的看了下系統的注釋代碼,並沒有什麼特殊的說明什麼情況會移除失敗啊。
竟然又是自己解決了問題,糾結了大半天。
原因很奇葩,是這樣的,剛才我想點擊進去removeFormSuperView,試試看看蘋果關於UIView的注釋。然後給我彈出了讓我選擇是哪一個removeFromSuperview.瞬間反應過來了,因為這個UIView的subviews是一個我自定義類型的UIView,我還在那個View裡自己重寫了removeFromSuperView.悲劇就這麼發生了。我忘記調用super了。怪不得。