【问题标题】:Can i reuse UIView?我可以重用 UIView 吗?
【发布时间】:2012-09-18 12:45:22
【问题描述】:

我的故事板中有 UIView 和插座 mynewView,我希望它显示完全不同的内容。并且重复多次。

我的 UIView 包含许多对象,我从 Internet 加载它。但每次我都这样做

    NSArray *viewsToRemove = [view1 mynewView];
    for (UIView *v in viewsToRemove) {
        [v removeFromSuperview];
    }

    //Let's try to remove all possible views..

    viewsToRemove = [self.view subviews];
    for (UIView *v in viewsToRemove) {
        [v removeFromSuperview];
    }

    //here i create mynewView
    mynewView = [self createnewRandomView];
    //And finally add the View we have created.

    [self.view addSubview:mynewView];

我监控内存消耗,每次添加新的 UIView 时都会看到它在增长。即使我删除所有超级视图。我猜他们会留在记忆中。

在我更改视图之前,我从超级视图中删除了所有可能的视图,但它们仍然保留在内存中。

Xcode 设置为使用 ARC,所以我无法发布它。

有什么好的方法可以重用 UIView 吗?

谢谢

【问题讨论】:

    标签: iphone ios uiview reusability


    【解决方案1】:
    [self.view addSubview:mynewView];
    

    您的 newView 已添加为 self.view 的子视图。 您上面的代码不用于删除 self.view 中的 yourVewView。 请在添加新视图之前尝试此代码:

    for (UIView *view in self.view) {
       if([view isKindOfClass:[YourNewViewClassName class]])
       {
           [view removeFromSuperView];
           break;
       }
    }
    

    【讨论】:

      【解决方案2】:

      删除子视图时,将它们设置为nil,如下所示:

      for (UIView *v in viewsToRemove) {
         [v removeFromSuperview];
          v = nil;
      }
      

      有关详细信息,请参阅例如Arc: Setting references to nil, for multiple buttons

      【讨论】:

      • 您真的应该阅读该链接文章 - 请注意“否”部分并再次检查您的答案。
      • 我错过了原始提问者没有引用子视图的事实,抱歉。那你的答案是什么?
      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      相关资源
      最近更新 更多