我正在试图弄清楚如何最好地处理多任务更改的appDelegate方法,我想考虑用户的任何可能的行为。
如果您在视图控制器的方法中进行了大量的ivar初始化和视图设置,会发生什么:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
虽然此方法已中途,但用户退出了您的应用。但是,因为它支持多任务,当它们再次打开它时,上面的init方法是否会在它停止的地方继续?
如果是这样,这就是为什么最好在上面的方法而不是viewDidLoad
中放置初始化的原因,因为如果你在viewDidLoad
运行时退出应用程序,它似乎{ {1}}如果您再次运行该应用,则不会从您停止的位置开始提取。
答案 0 :(得分:1)
方法- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
将完成执行,前提是您退出,即应用程序将进入后台这一事实。
例如,尝试将以下内容添加到该方法,然后按下按钮将应用程序添加到后台:
for (int a=0 ; a< 50000; a++) {
NSLog(@"t");
}
您应该看到在将应用程序发送到后台后,日志记录仍在继续。
回答你的第二个问题......
你应该在init中进行初始化,因为你可以确定每个对象只会被调用一次并且它的开头。当然,如果您在viewDidUnload
中销毁某些对象,则应在viewDidLoad中重新创建它们。所以每次都取决于你想要多长时间的ivars值。例如,请参阅此SO问题:What exactly must I do in viewDidUnload?