删除 viewdisappear 上的子视图出现时再次添加 - 不工作 - ios sdk

Posted

技术标签:

【中文标题】删除 viewdisappear 上的子视图出现时再次添加 - 不工作 - ios sdk【英文标题】:Remove subview on viewdisappear add again when appear - not working- ios sdk 【发布时间】:2015-05-16 10:26:03 【问题描述】:

我正在使用该应用程序并希望在视图消失删除表格视图并希望添加相同的表格视图视图出现时。

目前

    从 A ctr(push) -> B ctr

    从 B ctr(push) -> C ctr -- 我从 viewwilldisappear 的 superview 中删除了 B ctr 中的 tableview -- 工作正常。

    从 C ctr(pop) -> B ctr -- 在 B ctrview 将出现 我再次添加了 table view。 Viewwillaprea 被调用,但 tableview 未添加 作为子视图。

4 从 B ctr(pop) -> A ctr

    From A ctr(push) -> B ctr -- 这次在 B ctr tableview 出现。

当我返回 popViewControllerAnimated 时,它似乎没有将表添加为子视图。

我在 xib 中有表。

我想这样做是为了释放分配的内存。

tableview 插座

 @property (nonatomic,weak) IBOutlet UITableView *tView;

在 viewWillDisappear 中移除表格视图

  [self.tView removeFromSuperview];

在 viewWillAppear 中重新添加

  [self.view addSubview:self.tView];

提前致谢

【问题讨论】:

你为什么要这样做?显示代码。很可能您破坏了表格视图并且不重新创建它...... 您好 Wain,感谢您的回复,我想这样做是为了释放分配的内存。我刚刚用代码编辑了问题.. 【参考方案1】:

除非您有理由担心,否则您不应该担心这一点 - 即重复的内存警告。而且,如果您这样做,您应该找出原因 - 它极不可能是表格视图。如果有的话,它可能是您加载以填充表格视图的数据,因此您可以考虑在不显示时删除该数据...

无论如何,您的问题是您销毁并且不重新创建表视图。您的财产:

 @property (nonatomic,weak) IBOutlet UITableView *tView;

weak,因此当您从其父视图中删除视图时,它会被释放,因为没有其他东西持有对它的引用。

稍后调用时:

 [self.view addSubview:self.tView];

在调用self.tView = newTView 之前,您需要重新创建表格视图并将其添加到子视图中,否则不会再保留它,并且在您使用它之前它会被销毁。

关键点:

    修复任何内存问题(配置文件以找到真正的原因) 不要删除表格视图

【讨论】:

感谢 Wain 的快速回复,非常感谢您的帮助。我确实在谷歌上搜索过解决内存问题的解决方案。尝试了一些但没有帮助...虽然删除表格视图确实释放了分配的内存......你也可以看到,当我再次推送它加载表格的视图时......有没有什么办法可以像推送时那样重新添加它...... 大概你有一个故事板?所以不,不是真的。除了当你转到 C 并实际推送时弹出,但这并不是微不足道的,因为它不是这样设计的。真的 - 不要删除视图,找到真正的问题 视图控制器在XIB中?同样的问题。如果只有表格视图在 XIB 中,那么您可以重新加载它。但说真的,这不是解决您问题的正确方法 将数据设置为零/行数为零并重新加载数据【参考方案2】:

您已为 UITableView 设置了 weak 属性。从superview中删除它的那一刻,它将从内存中删除。

您可以设置strong 属性来防止这种情况发生。但这会破坏为了释放内存而删除它的意义。

你可以新建一个tableView,并在-viewWillAppear方法中设置。

要了解有关这些属性的更多信息,请查看documentation。

还有这个article很好地解释了各种属性。

【讨论】:

以上是关于删除 viewdisappear 上的子视图出现时再次添加 - 不工作 - ios sdk的主要内容,如果未能解决你的问题,请参考以下文章

FirstViewController 在删除 SecondViewController 的子视图时不起作用

UIView 即使在开始从超级视图中删除后也会重新出现

iPad 上的 UIModalPresentationFormSheet。键盘出现时如何调整UITextView的高度

uiview 作为包含 uitableview 的子视图

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?

添加删除的子视图 Swift 3 iOS