1、viewDidLoad在视图加载时调用,viewWillAppear在视图可见时调用。
如果您的 viewDidLoad 被多次调用,这意味着您每次显示它时都在加载视图,并且每次弹出它时都释放它。如果您发布一些代码,我可以帮助您更好地识别问题。
你可以做的是这样的:
在您的“根”viewController 类中,将每个“叶”ViewController 声明为成员,假设它们被称为leafController1、leafController2 等,并为它们创建保留属性。
@interface YourRootViewController : UIViewController {
LeafController1Class *leafController1;
LeafController2Class *leafController2;
// ...
}
@property (nonatomic, retain) LeafController1Class *leafController1;
@property (nonatomic, retain) LeafController2Class *leafController2;
// ...
@end
在您的顶级 ViewController 的 ViewDidLoad 中,使用“initWithNibName”等(或您为创建它们所做的任何事情)初始化所有叶控制器。像这样保留他们的实例:
self.leafController1 = [[[LeafController1Class alloc] initWithNibName:@"LeafController1NibName" bundle:nil] autorelease];
当用户按下按钮时,将正确的叶子推送到导航控制器:
[myNavigationController pushViewController:leafController1 animated:YES];
当您现在弹出叶控制器时,它们将保留在内存中,因为您保留了它们。这样,只要您始终将视图控制器的相同实例推送到导航控制器,您的 viewDidLoad 只会为每个叶子调用一次。
2. 与视图相关的繁重代码应在视图加载完毕后执行,即由viewDidLoad触发。但是,保留其他保存有关您的应用程序信息的类可能是一个好主意,这些类不是视图控制器并且与 UI 分开。繁重的计算最好在后台进行,或者在第一次加载应用程序时进行。