0

我有一个应用程序,其中有几个视图控制器在最后阶段之前相互叠加,用户“保存”他在阶段中输入的所有数据。在输入数据阶段,允许用户返回并更改一些数据。但是我想释放一些数据结构,因为它们消耗大量内存。我无法在此期间释放它,viewdidunload因为它仅在设备内存不足时才被调用。我也无法发布它,viewDidDisappear因为如果用户想要返回并更改内容,数据将不存在。

我认为这样做的方法是设置指向前一个视图控制器的指针viewcontrollers,然后在指向前一个视图控制器的指针上调用释放函数来释放东西。

我该怎么做呢?

我想我放了类似的东西

#import "SomeViewController.h"

@property SomeViewController someViewController;

.h文件中?我不知道从这里去哪里。

4

2 回答 2

2

如果您使用的内存过多,系统会以比任何 DIY 系统更有效的方式为您处理。这就是为什么首先出现内存警告、ARC、池和所有其他好东西的原因。因此,我会建议您不要尝试完成什么,并相应地处理内存警告。顺便说一句,请注意将数据存储在视图控制器中并不是一个好习惯,您应该将数据结构保存在单独的对象中(如 MVC 建议的那样)。例如,您可以将数据保存在单例对象中,您可以从每个视图控制器访问该对象,这样您还可以释放不再需要的内存,而无需保留指向所有 VC 链的指针。

于 2012-08-17T15:18:50.017 回答
0

这取决于您要保存的数据类型。我会在 iOS 中提升数据存储的层次结构。看看 NSUserDefaults 是否会帮助你(从你的问题的性质来看,我认为这不会有帮助)。然后尝试 SQLite。然后去核心数据。根据数据的性质,也许您也可以尝试将数据存储在文件中。如果您可以在单独的类中使用静态方法来处理在您导航关卡时保存所有这些中间数据,那将是非常棒的。保存最终数据后,删除所有临时存储空间即可。

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

于 2012-08-17T15:18:29.297 回答