【问题标题】:Swift - Reuse the old instance of view when switch between Views and Passing data over viewsSwift - 在视图之间切换和通过视图传递数据时重用视图的旧实例
【发布时间】:2016-03-12 03:07:37
【问题描述】:

我正在尝试创建一个简单的应用程序,它的工作原理如下:

当用户点击“Picking”按钮时,它会显示一个tableview。并且当用户在表格视图中选择一行时,它将显示第一个视图并在标签上显示数据。

我有两个问题:

  1. 每次单击“Picking”按钮时,都会创建一个新的表格视图控制器实例;但不重用现有的。我怎样才能让它重用旧的?

  2. 我想将选定的数据传递给根视图。我尝试创建一个 segue 以在用户选择一个单元格时显示根视图,然后在 prepareForSegue 方法上传递数据。但是,我遇到了上述内存泄漏问题。如何在屏幕之间传递数据而不泄漏内存?

【问题讨论】:

    标签: swift uitableview uiviewcontroller


    【解决方案1】:
    1. 听起来您可能正在制作圆形视图层次结构。当您点击表格视图中的单元格时,如果您正在推送第一个 VC 的新实例,那么 IMO 这样做是错误的。

      相反,您应该将数据传回第一个 VC,然后关闭第二个 VC。然后,当您再次点击“选择”按钮时,它是表格视图的一个新实例,但您之前的实例已从内存中删除。

      这允许在任何给定时间使用最少的内存。当表格视图控制器不在屏幕上时,它不需要在内存中。

    2. IMO,将数据向上传递到导航堆栈的最佳方式是使用协议和委托。如果您熟悉的话,它类似于 Objective-C 协议和委托的工作方式。这是Apple关于两者的文档。代表部分大约在页面下方的 1/3 处。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html

    【讨论】:

    • 非常感谢您的帮助@Jay
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多