【问题标题】:Data Retention on VIewController/ViewsVIewController/Views 上的数据保留
【发布时间】:2013-01-04 18:49:13
【问题描述】:

有一个简单的问题:

我有 2 个视图控制器及其关联的视图。

第一个 VC 的图像已通过遮罩着色。 This is a link 我将采用的技术。

第二个 VC 和视图只是一个包含随机内容的设置屏幕。

假设这种情况:

  1. 第一个带图片的VC加载完毕,着色完成

    注意:颜色是随机的,值不会存储在任何地方。和 这么多图像,很难存储所有这些随机的 变量中的颜色。

  2. 在第一个 VC 上,用户按下按钮导航到 设置画面

  3. 现在通过模态操作加载第二个 VC

  4. 在第二个 VC 上,用户按下“返回”按钮返回到 前一个 VC,在这种情况下是第一个 VC。

问题:在导航期间和导航回第一个 VC 之后,我以编程方式随机选择的图像和颜色是否仍然可见,或者我会丢失那些随机生成的颜色?如果不是,我如何确保在 First VC 上呈现的内容将在任何导航操作中得到维护?

【问题讨论】:

    标签: iphone objective-c ios xcode ios6


    【解决方案1】:

    只要 View Controller 留在导航堆栈上,它所保存的所有数据在您返回时仍然有效。将任意数量的视图控制器推送到堆栈顶部不会对第一个视图控制器执行任何操作,但是一旦您将第一个视图控制器从堆栈中弹出,它将丢失它拥有的所有数据,除非以其他方式保存并重新加载(在变量中例如,在 App Delegate 中)。

    【讨论】:

    • 如果我不使用导航控制器怎么办?我只有VC,它们都是通过按钮导航的,没有涉及导航控制器。
    • 在这种情况下,您并没有真正导航回原始视图。话虽如此,您提到第二个视图也是模态的。模态视图控制器在调用它的视图控制器上方“弹出”,并且模态视图控制器就是它们的样子,原始视图控制器将保留在它下面的内存中,因为第一个视图控制器在那里,它只是“在”下面模态视图,直到它被关闭。话虽如此,任何导航都最好使用导航控制器和导航堆栈来完成。
    【解决方案2】:

    除非您释放第一个视图,否则您不会丢失您创建的图像。由于您在第一个视图之上显示第二个视图,因此所有图像都将在那里。您不必担心保存颜色或图像。您可以在第一个视图控制器上推送任意数量的视图控制器。

    请注意,这仅在您不删除/弹出/关闭第一个视图控制器或其视图时才有效。

    【讨论】:

    • 导航离开或切换到不同的 VC 是否会释放第一个视图?
    • 不,不是。它将保留在堆栈中。基本上它会一直保留到视图控制器从堆栈中移除。每当您推送视图控制器时,它都会被保留,当您弹出时,它会被释放。
    • @jacobronniegeorge,如果这有帮助,请您接受答案。
    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2010-11-16
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多