我有一个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