如何最佳地重复使用UIViewControllers? 在许多应用程序中(包括苹果的示例:例如SQLiteBooks),每次将UIViewController推送到堆栈时都会分配和初始化UIViewControllers。这会随着每个新控制器的出现而增加内存使用,因为对象保留在内存中并且不再被使用。
如何改善呢?
如何最佳地重复使用UIViewControllers? 在许多应用程序中(包括苹果的示例:例如SQLiteBooks),每次将UIViewController推送到堆栈时都会分配和初始化UIViewControllers。这会随着每个新控制器的出现而增加内存使用,因为对象保留在内存中并且不再被使用。
如何改善呢?
每次新控制器的使用都会增加内存的使用量,因为对象留在内存中并且不再被使用。
只要没有其他东西持有它,当堆栈弹出时应该释放它。检查你的dealloc方法是否被调用。
此外,如果将其推入堆栈,则需要至少保留到它被弹出(如果遵循标准模式,则自动发生)。因此,遵循标准模式应该已经使您的内存使用量尽可能小。
当我创建一个新的视图控制器时,这就是我所做的,当视图从窗口中移除时,内存会被释放。
MyViewController *mvc = [[[MyViewController alloc] initWithNibName:@"MyView" bundle:nil] autorelease];
[[self navigationController] pushViewController:mvc animated:YES];
你是否真的遇到了需要解决的内存问题,还是这只是过早的优化?我会说,除非有特定的资源问题,否则最好遵循标准的视图控制器模式。
不要忘记,视图控制器并不是你的视图。
由视图控制器持有的视图可以卸载,因此视图控制器本身非常轻量级。如果您想保持足够轻便的占用空间,可以在viewDidUnload中将控制器分配的任何其他数据置为空(通常在出现内存警告时调用 - 这只是3.0版本才有的功能)。
正如大多数情况下视图控制器在离开时(点击返回按钮)会被释放,所以通常不会有任何挂起的视图控制器。但有时候,如果我想以用户离开时的相同状态重新打开该视图,则保留一个引用会很方便(在应用程序启动之间不起作用)。