gpt4 book ai didi

iphone - viewDidLoad 多久被调用一次?

转载 作者:行者123 更新时间:2023-12-03 18:19:08 32 4
gpt4 key购买 nike

当用户切换到另一个程序然后再次返回时,原始程序的 View 将被另一个程序的新 View 替换。那么当用户切换回原来的程序时,viewDidLoad会被第二次调用吗?

我问这个是因为如果是这种情况,那么每次用户来回切换屏幕时,都会执行 viewDidLoad 中放置的初始化代码。这可能会导致重置 View 并丢失用户未完成的作品......

最佳答案

不要在 viewDidLoad 中进行 View Controller 初始化。这是一个常见的错误。

对于在 View Controller 加载时只发生一次的事情,请在 Controller 的 init 方法中执行,如下所示:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)bundleOrNil
{
if ((self = [super initWithNibName:nibNameOrNil bundle:bundleOrNil]))
{
//do your initialisation here
}
return self;
}

initWithNibName:bundle:方法在从 nib 加载 View 之前调用,并且在 View Controller 的生命周期中仅调用一次。

Controller 的 View 在 Controller 的生命周期内可以多次加载和卸载,viewDidLoad每次都会被调用。当它不在屏幕上时,通常会在内存不足时将其卸载。

如果您确实在 viewDidLoad 中进行了设置(例如以编程方式添加 subview )您应该始终在 viewDidUnload 中再次取消设置它们.

想想viewDidLoadviewDidUnload就像 View Controller 的 View 属性的 init/dealloc 一样。对于与 View 相关的内容,在这些方法中创建和释放它。对于与 Controller 本身相关的东西,在initWithNibName中创建并释放它。和dealloc .

更新:在 iOS 6 及更高版本上,viewDidUnload永远不会再被调用(除非 View 在代码中显式设置为 nil),所以 viewDidLoad通常在 View Controller 的生命周期中只会被调用一次。这使得上面的建议不再那么重要,但它仍然是最佳实践,并且如果您需要支持 iOS 5 及更早版本,那么它仍然是必要的。

更新2:如果您从 Storyboard加载 View Controller (这是现在推荐的做法),而不是以编程方式创建它,则 initWithNibName:bundle:不会被调用。使用initWithCoder:awakeFromNib来初始化您的 Controller 。

关于iphone - viewDidLoad 多久被调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137413/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com