关于uiviewcontroller内存管理和在它们之间传递数据的困惑

时间:2012-05-12 12:11:04

标签: ios

我是iOS编程新手,我阅读了视图控制器编程指南,但有些事情我还不清楚

  • 视图控制器的视图被破坏但是视图控制器仍然存在,没有任何指定,如果我自己想要销毁任何视图控制器或者我错过了它。 VC指南说,当内存开始缩短其他资源时,iOS会破坏VC,同样适合VC的观点吗?需要了解VC的内存管理,请阅读我的第二点。

  • 在uinavigationcontroller中,我有一个tableviewcontroller,显示我的朋友列表,在选择我的朋友时,我正在推动另一个VC聊天。问题是每次选择朋友我是否必须创建聊天VC的新实例?这个聊天VC对于我想与之聊天的每个朋友都是独一无二的?我也在DB中保存消息,所以谁有朋友窗口打开或关闭消息显示,用户不会得到空白视图。是否有可能只有一个聊天VC的瞬间被唯一地用于每个朋友(意味着只有特定朋友的消息显示并发送给他我想要聊天的人)。我认为这个问题与在viewcontrollers之间传递数据有关但我很困惑。

我希望我能清楚地定义我所迷惑的内容。请忽略任何愚蠢的错误。

谢谢。

1 个答案:

答案 0 :(得分:3)

回答您的疑问 -

  1. 视图控制器的视图已被破坏但视图控制器仍然存在
  2. 根据UIViewController指南 - 它负责创建这些视图并在适当的时候放弃它们的所有权,包括在内存不足的情况下以及视图控制器本身被释放时。

    因此我们需要取得所有权以释放视图控制器。 UIViewController类还通过didReceiveMemoryWarning方法自动处理低内存条件,该方法释放不需要的内存。

    1. 在您的情景中 -
    2. TableView - >点击单元格推送下一个视图 - >现在弹出这个视图回到表格视图(这里是内存得到释放) - >再次在表格视图中 - >单击单元格时,将推送新的视图控制器。

      以这种方式处理内存。如果在层次结构中我们正在推动一些观点,如 -

      VC1 - > VC3 - > VC4

      现在在这种情况下,导航控制器保留所有这些视图控制器的实例,因为导航控制器为我们提供了向后移动的灵活性。当我们返回时,视图控制器将从堆栈中移除,并且分配给它的内存将被释放。

      使用的语法 -

      推送视图控制器 -

      [self.navigationController pushViewController:myViewController animated:YES];
      [myViewController release];//at the time of push we add this release statement.
      

      现在当我们执行pop时,会调用它的dealloc方法,并将其从堆栈中删除。

      [self.navigationController popViewControllerAnimated:YES];//That view is release from navigation stack
      

      希望这能清除你的怀疑。 查看此开发者页面以获取更多详细信息 - http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html