0

我有一个基于导航的应用程序。屏幕列表有一个UITableView带有书籍列表的列表。书籍列表位于NSArray通过执行 HTTP 请求动态构建的属性中。当单击List中的某一行时,将导航到屏幕Details。假设此时有内存警告。当您回到屏幕List时,因为被调用,所以它NSArray是 nil ,所以List将为空。viewDidUnload

处理这种情况的正确方法是什么?我不应该将 设置NSArray为 nilviewDidUnload吗?

4

4 回答 4

1

通常你只会为你的 IBOutlet UI 元素清空属性。您还可以安全地清理任何可以在-viewDidLoad. 但一般来说,这种方法只是为了清理和释放与视图相关的内存,而不是视图控制器。

于 2011-07-31T17:58:54.607 回答
0

正确的方法不是将数据存储在 UIViewController 中,而是存储在另一个管理数据的对象中。

视图控制器充当模型和屏幕之间的链接。您不应该使用它来存储您的数据。

于 2011-07-31T17:59:13.977 回答
0

通常我在 void dealloc() 中设置对象的 NS(Mutable)Array。Nil 和释放(如果对象不是自动释放的)。

如果你使用 uinavigationcontroller,视图是推送的,所以当你从你的详细视图返回时,通常你会有你之前的数据,除非你放入视图会出现刷新。

我的猜测是您在从 http 请求中释放内存时遇到问题。

于 2011-07-31T18:05:35.193 回答
0

如果您的数组是在 viewDidLoad 部分中构建的,那么您可以将其设置为 nil。当视图被调用时,它将被重建。

通常,您希望在 viewDidUnload 中将任何可以在 viewDidLoad 部分或 xib 文件中重建的内容设置为 nil。

我建议像这样懒惰地初始化 -

- (NSArray *)bookArray {
    if (bookArray == nil) {
        bookArray = [[NSArray alloc] init];
    }
    return bookArray;
}

然后在 viewDidLoad 中:

self.bookArray = [NSArray arrayWithOjects:...,nil];
于 2011-07-31T18:15:58.727 回答