iOS内存管理 - viewDidUnload

时间:2011-07-31 17:57:08

标签: iphone memory-management viewdidunload

我有一个基于导航的应用程序。屏幕列表有一个UITableView,其中包含图书清单。书籍列表位于通过执行HTTP请求动态构建的属性NSArray中。当您点击列表中的某一行时,就会导航到屏幕详细信息。假设此时存在内存警告。当您返回屏幕列表时,NSArray为零,因为调用了viewDidUnload,因此列表将为空。

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

4 个答案:

答案 0 :(得分:1)

通常,您只会为您的IBOutlet UI元素定义属性。您还可以安全地清理可以在-viewDidLoad中重新创建的任何内容。但一般来说,此方法仅用于清理和释放与视图相关的内存,而不是视图控制器。

答案 1 :(得分:0)

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

viewcontroller用作模型和屏幕之间的链接。您不应该使用它来存储您的数据。

答案 2 :(得分:0)

通常我在void dealloc()中设置对象的NS(Mutable)数组。 无和释放(如果对象未自动释放)。

如果您使用uinavigationcontroller,则会推送视图,因此当您从详细信息视图返回时,通常您将获得以前的数据,除非您在viewwillappear中进行刷新。

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

答案 3 :(得分:0)

如果您在viewDidLoad部分中构建了数组,则可以将其设置为nil。当视图被召回时,它将被重建。

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

我建议懒惰地初始化,不过这样 -

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

然后在viewDidLoad中:

self.bookArray = [NSArray arrayWithOjects:...,nil];