我正在使用该应用程序,并希望在视图消失时删除表格视图,并希望添加相同的表格视图 查看显示。
目前
来自A ctr(推) - > B ctr
来自B ctr(推) - > C ctr - 我在viewcilldisappear中从superview中删除了B ctr中的tableview - 工作正常。
来自C ctr(pop) - > B ctr - 在视图中显示 B ctr 我再次添加了表格视图。 Viewwillaprea 被调用但 tableview未添加作为子视图。
4来自B ctr(pop) - >一个中心
似乎当我回到popViewControllerAnimated时,它没有将表添加为子视图。
我在xib中有表。
我想这样做是为了释放分配的内存。
tableview outlet
@property (nonatomic,weak) IBOutlet UITableView *tView;
删除viewWillDisappear中的表格视图
[self.tView removeFromSuperview];
在viewWillAppear中添加回来
[self.view addSubview:self.tView];
提前致谢
答案 0 :(得分:1)
除非你有理由 - 即重复记忆警告,否则你不应该担心这一点。而且,如果你这样做那些你应该弄清楚为什么 - 它不太可能成为表格视图。如果有任何可能是您加载的数据填充表视图,那么您可以考虑在不显示时删除该数据...
无论如何,您的问题是您销毁并且不重新创建表格视图。你的财产:
@property (nonatomic,weak) IBOutlet UITableView *tView;
是weak
,因此当您从超级视图中删除视图时,它将被取消分配,因为没有其他内容存在对它的引用。
以后打电话:
[self.view addSubview:self.tView];
你需要重新创建表格视图并在调用self.tView = newTView
之前将其添加到子视图中,因为否则什么都不会再次保留它,它会在你使用之前被销毁。
关键点:
答案 1 :(得分:0)
您已为UITableView设置了weak
属性属性。从superview中删除它的那一刻,它将从内存中删除。
您可以设置strong
属性以防止这种情况发生。但是,为了释放记忆,这将无法取消它。
您可以创建一个新的tableView并在-viewWillAppear
方法中设置它。
要了解有关这些属性的更多信息,请查看documentation。
此article也很好地解释了各种属性属性。