我正在尝试创建一个简单的应用程序,以下是它的工作原理:
当用户点击“Picking”按钮时,它会显示一个tableview。当用户在表视图中选择一行时,它将显示第一个视图并在标签上显示数据。
我有两个问题:
每次单击“Picking”按钮,都会创建一个新的表视图控制器实例;但不重复使用现有的。如何重复使用旧的?
我想将所选数据传递给根视图。我尝试创建一个segue,以便在用户选择一个单元格然后在prepareForSegue
方法上传递数据时显示根视图。但是,我遇到了上述内存泄漏问题。如何在不泄漏内存的情况下在屏幕之间传递数据?
答案 0 :(得分:0)
听起来您可能正在制作圆形视图层次结构。当您在表视图中点击单元格时,如果您正在推送第一个VC的新实例,那么这是错误的方式来执行IMO。
相反,您应该将数据传回第一个VC然后关闭第二个VC。然后,当您再次点击“Picking”按钮时,它是表视图的新实例,但您的上一个实例已从内存中删除。
这允许在任何给定时间使用最小量的内存。当表视图控制器不在屏幕上时,它不需要在内存中。
IMO,将数据传递到导航堆栈的最佳方法是使用协议和委托。如果您熟悉Objective-C协议和代理,它类似于Objective-C协议和代理的工作方式。这是Apple关于这两者的文档。代表部分大约是页面下方的1/3。 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html