我试图理解以下内容。
我正在调试一个似乎需要更多内存的应用程序。我将以下代码添加到'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
时,不应该释放内存吗?或者,在低内存条件下,实际上是否释放了为视图分配(并列在实时字节下)的内存?
答案 0 :(得分:0)
消息传递[viewController view]
加载视图(当/需要时)。