Objective c iOS:卸载和弹出视图控制器

Objective c iOS:卸载和弹出视图控制器,objective-c,ios,Objective C,Ios,我有一个应用程序,在最后一个阶段之前,有几个视图控制器彼此重叠,用户在最后一个阶段“保存”他在这些阶段中输入的所有数据。在进入数据阶段,允许用户返回并更改部分数据。然而,我想释放一些数据结构,因为它们消耗了大量内存。我无法在viewdidunload期间释放它,因为它只有在设备内存不足时才会被调用。我也不能在viewdiddefine中发布它,因为如果用户想返回并更改内容,数据将不在那里 我认为这样做的方法是设置viewcontrollers指向前一个viewcontrollers的指针,然后在

我有一个应用程序,在最后一个阶段之前,有几个视图控制器彼此重叠,用户在最后一个阶段“保存”他在这些阶段中输入的所有数据。在进入数据阶段,允许用户返回并更改部分数据。然而,我想释放一些数据结构,因为它们消耗了大量内存。我无法在
viewdidunload
期间释放它,因为它只有在设备内存不足时才会被调用。我也不能在
viewdiddefine
中发布它,因为如果用户想返回并更改内容,数据将不在那里

我认为这样做的方法是设置
viewcontrollers
指向前一个viewcontrollers的指针,然后在指向前一个viewcontroller的指针上调用release函数来释放内容

我该怎么做

我想我放了一些

#import "SomeViewController.h"

@property SomeViewController someViewController;

.h
文件中?我不知道该从这里走到哪里。

这取决于您试图保存的数据类型。我会在iOS中升级数据存储的层次结构。看看NSUserDefaults是否会帮助您(从您问题的性质来看,我认为这不会有帮助)。然后试试SQLite。然后去寻找核心数据。根据数据的性质,您也可以尝试将数据存储在文件中。如果您可以在一个单独的类中使用静态方法来处理在导航级别时保存所有这些中间数据,那就太棒了。保存最终数据后,删除所有临时存储,即可完成操作


哦,使用这种技术的另一个好处是,如果用户出于某种原因决定杀死你的应用程序并重新启动它,或者你的应用程序意外崩溃,那么“从你之前停止的地方继续”。在这种情况下,请检查导航完成的级别,然后继续操作。

如果您使用的内存太多,系统将以任何DIY系统都无法比拟的更高效方式为您处理。这就是为什么内存警告、ARC、池和所有其他好东西首先出现的原因。所以我建议你不要去做你想做的事,而只是相应地处理记忆警告。
顺便说一句,请注意,在ViewController中存储数据不是一个好的做法,而是应该将数据结构保存在单独的对象中(如MVC所建议的)。例如,您可以将数据保存在单个对象中,您可以从每个视图控制器访问该对象,这样您也可以释放不再需要的内存,而无需保留指向所有VC链的指针。

您使用的是什么视图层次结构?导航控制器?