1

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

  • viewcontroller 的视图被破坏但 viewcontroller 仍然存在,没有指定我自己是否想销毁任何 viewcontroller 或者我只是错过了它。VC 指南说,当内存开始对其他资源不足时,iOS 会破坏 VC,VC 的观点也是如此,对吧?需要了解VC的内存管理,请看我的第二点。

  • 在一个 uinavigationcontroller 我有一个 tableviewcontroller 显示我的朋友列表,在选择我的任何一个朋友时,我正在推动另一个聊天 VC。问题是每次选择朋友时我都必须创建一个新的聊天 VC 实例吗?对于我想与之聊天的每个朋友来说,这个聊天 VC 将如何是独一无二的?我还在数据库中保存消息,所以无论朋友窗口打开或关闭消息出现,用户都不会看到空白视图。是否有可能只有一个即时聊天 VC 用于每个朋友唯一(意味着仅特定朋友显示的消息并发送给我要与之聊天的他)。我认为这个问题与在视图控制器之间传递数据有关,但我很困惑。

我希望我已经清楚地定义了我的困惑。请忽略任何愚蠢的错误。

谢谢你。

4

1 回答 1

3

回答您的疑问 -

  1. 视图控制器的视图被销毁但视图控制器仍然存在

根据 UIViewController 指南 - 它负责创建这些视图并在适当的时间放弃它们的所有权,包括在内存不足的情况下和视图控制器本身被释放时。

所以我们需要取得所有权来释放一个视图控制器。此外,UIViewController 类通过其 didReceiveMemoryWarning 方法提供了一些低内存条件的自动处理,该方法释放了不需要的内存。

  1. 在您的场景中-

TableView -> 单击单元格推送下一个视图 -> 现在弹出此视图以返回表格视图(此处内存已释放)-> 再次在表格视图中 -> 单击单元格时推送一个新的视图控制器。

以这种方式处理内存。如果在层次结构中我们正在推送一些视图,例如 -

VC1 -> VC2 > 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

于 2012-05-12T12:36:08.193 回答