UIViewController.view的内存分配/释放

时间:2011-06-19 13:31:27

标签: iphone cocoa-touch memory-management uiviewcontroller

我试图理解以下内容。

我正在调试一个似乎需要更多内存的应用程序。我将以下代码添加到'crashtest'一个viewcontroller:

NSLog(@"allocating 10000 instances of the MyViewController");
for (int i=0; i<10000; i++) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    MyViewController *aController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    if (aController.view == nil) {} 
    [aController release];
    [pool drain];
}
NSLog(@"done allocating 10000 instances of MyViewController");

当我在Instruments / Allocations中运行上述代码时,在进入循环之前,其内存使用量 All Allocations / live 约为5 Mb。循环运行后大约是24 Mb。

如果我在禁用行if (aController.view == nil) {}的情况下运行相同的代码,则内存不会显着增加。

UIViewController会自动调用loadView(),因为我使用了aController.view。所以我可以理解mem使用率的暂时增加。但是当我在控制器上调用release时,不应该释放内存吗?或者,在低内存条件下,实际上是否释放了为视图分配(并列在实时字节下)的内存?

1 个答案:

答案 0 :(得分:0)

消息传递[viewController view]加载视图(当/需要时)。