我有一個UIView * buttonView充滿了按鈕。我需要更新我的列表並重新填充我的buttonView。我實現了:爲什麼快速枚舉在標準for循環失敗時工作?
if ([[self.buttonView.subviews objectAtIndex:i] isKindOfClass:[UIButon class]]
[[self.buttonView.subviews objectAtIndex:i] removeFromSuperview];
但是失敗了,它不會刪除所有的按鈕(與我有8次按鍵測試,它刪除所有其他按鈕: - ?)
然後我想:
for(UIView *subview in self.buttonView.subviews)
{
if([subview isKindOfClass:[UIButton class]])
[subview removeFromSuperview];
}
它的工作完美。
不應該兩個循環完成相同的事情?
我猜想有一些我不知道快速枚舉,可以解釋這一點?
根據實現細節,在一個循環,變異的子視圖陣列可能最終被相對低效的不斷調用'-subviews'。請參閱我的答案,瞭解可能更有效的其他解決方案。 – 2012-02-14 20:52:11