ios - 对 uiviewcontroller 内存管理和在它们之间传递数据感到困惑

标签 ios

我是 iOS 编程新手,我阅读了 View Controller 编程指南,但有些事情我还不清楚

  • View Controller 的 View 被破坏,但 View Controller 仍然存在,没有指定我自己是否想销毁任何 View Controller 或者我只是错过了它。 VC 指南说,当内存开始对其他资源不足时,iOS 会破坏 VC,VC 的观点也是如此,对吧?需要了解VC的内存管理,请看我的第二点。
  • 在 uinavigationcontroller 中,我有一个 tableviewcontroller 显示我的 friend 列表,在选择我的任何一个 friend 时,我正在插入另一个聊天 VC。问题是每次选择 friend 时我都必须创建一个新的聊天 VC 实例吗?对于我想与之聊天的每个 friend 来说,这个聊天 VC 将如何是独一无二的?我还在数据库中保存消息,所以无论 friend 窗口打开或关闭消息出现,用户都不会看到空白 View 。是否有可能只有一个即时聊天 VC 用于每个 friend 唯一(意味着仅特定 friend 显示的消息并发送给我要与之聊天的他)。我认为这个问题与在 View Controller 之间传递数据有关,但我很困惑。

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

    谢谢你。

    最佳答案

    回答您的疑问 -

  • View Controller 的 View 被销毁,但 View Controller 仍然存在

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

    所以我们需要取得所有权来释放一个 View Controller 。
    此外,UIViewController 类通过其 didReceiveMemoryWarning 方法提供了一些低内存条件的自动处理,该方法释放了不需要的内存。
  • 在您的场景中-

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

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

    VC1 -> VC2 > VC3 -> VC4

    现在在这种情况下,导航 Controller 保留所有这些 View Controller 的实例,因为导航 Controller 为我们提供了向后移动的灵 active 。一旦我们返回, View Controller 就会从堆栈中删除,分配给它的内存也会被释放。

    使用的语法 -

    推送 View Controller -
    [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

    关于ios - 对 uiviewcontroller 内存管理和在它们之间传递数据感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563602/

    相关文章:

    ios - 使用内联样式更改日期选择器的字体颜色

    ios - 带有 UIBezierPath 的 CAShapeLayer

    ios - 如何在单击按钮时将用户发送到 Facebook 页面

    ios - 允许以编程方式访问图库照片

    ios - 如何在SwiftUI的底部创建日期选择器?

    iphone - 为我的设备构建时,如何选择 Xcode 4 将使用哪个构建配置?

    ios - 如何在不使用委托(delegate)的情况下快速从辅助 View Controller 调用主 ViewController 中定义的函数?

    ios - UIActivityViewController 联系人共享?

    iOS Swift 应用程序 - 数据库

    IOS7 - 自动布局屏幕宽度