在viewdisappear上移除子视图会在显示时再次添加 - 不工作 - ios sdk

时间:2015-05-16 10:26:03

标签: ios pushviewcontroller addsubview superview poptoviewcontroller

我正在使用该应用程序,并希望在视图消失删除表格视图,并希望添加相同的表格视图 查看显示

目前

  1. 来自A ctr(推) - > B ctr

  2. 来自B ctr(推) - > C ctr - 我在viewcilldisappear中从superview中删除了B ctr中的tableview - 工作正常。

  3. 来自C ctr(pop) - > B ctr - 在视图中显示 B ctr 我再次添加了表格视图。 Viewwillaprea 被调用但 tableview未添加作为子视图。

  4. 4来自B ctr(pop) - >一个中心

    1. 来自A ctr(推) - > B ctr - 这次出现在B ctr tableview中。
    2. 似乎当我回到popViewControllerAnimated时,它没有将表添加为子视图。

      我在xib中有表。

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

      tableview outlet

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

      删除viewWillDisappear中的表格视图

        [self.tView removeFromSuperview];
      

      在viewWillAppear中添加回来

        [self.view addSubview:self.tView];
      

      提前致谢

2 个答案:

答案 0 :(得分:1)

除非你有理由 - 即重复记忆警告,否则你不应该担心这一点。而且,如果你这样做那些你应该弄清楚为什么 - 它不太可能成为表格视图。如果有任何可能是您加载的数据填充表视图,那么您可以考虑在不显示时删除该数据...

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

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

weak,因此当您从超级视图中删除视图时,它将被取消分配,因为没有其他内容存在对它的引用。

以后打电话:

 [self.view addSubview:self.tView];

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

关键点:

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

答案 1 :(得分:0)

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

您可以设置strong属性以防止这种情况发生。但是,为了释放记忆,这将无法取消它。

您可以创建一个新的tableView并在-viewWillAppear方法中设置它。

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

article也很好地解释了各种属性属性。