【问题标题】:Removing elements from an array while enumerating over that array在枚举该数组时从数组中删除元素
【发布时间】:2013-07-04 23:53:33
【问题描述】:

如果有人问过这个问题,请原谅我,我没有对 SO 进行足够好的搜索。

我正在执行以下操作来枚举子视图数组,同时从其父视图中删除每个子视图:

for( NSView *subview in [[self subviews] copy])
{
    [subview removeFromSuperview];
}

它工作正常,但是有没有更合适的方法来实现这个循环,而不是简单地复制数组?

【问题讨论】:

  • iPhone - Remove all SubViews? 的可能重复项
  • 这是我所知道的最优雅的方式。
  • @Danilo 我想我正在寻求解决该问题的最佳方法。我有一个可行的解决方案,我想知道首选/更正确的方法。

标签: objective-c arrays enumeration


【解决方案1】:

NSViewsubviews getter 直接返回它的可变数组而不复制它。所以如果你想删除特定的子视图,方法就是复制它。否则,在您的特定情况下,由于您要删除所有子视图,您可以将其子视图设置为空数组:

[self setSubviews: @[] ];

【讨论】:

    【解决方案2】:

    这是一个选项

    for (int i = self.subviews.count - 1; i >= 0; --i) {
        UIView* v = self.subviews[i];
        [v removeFromSuperview];
    }
    

    【讨论】:

    • 感谢您的回答。我想我正在寻找更优雅的东西,但我认为这同样适用。
    猜你喜欢
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多