何时调用 viewDidLoad?
Posted
技术标签:
【中文标题】何时调用 viewDidLoad?【英文标题】:When is viewDidLoad called? 【发布时间】:2010-10-16 17:24:27 【问题描述】:假设chatViewController
的一个属性,即fetchedResultsController
,UITableViewController
的子类的一个实例,在调用viewDidLoad
时始终为nil
,假设它设置为@,是否安全? 987654326@ 在viewDidUnload
?呸!
如果是这样,那么我认为没有必要像 Xcode 示例应用程序 CoreDataBooks 中那样立即重新定义访问器函数。我宁愿把所有代码都放在viewDidLoad
中,而不是放在单独的函数中,因为这是我唯一会用到它的地方。
【问题讨论】:
【参考方案1】:viewDidLoad 在你的视图被加载后被调用。 fetchedResultsController 是否为 nil 取决于 viewController 的初始化方式。例如,在创建detailViewController
时,您可以在调用viewDidLoad
之前设置它的fetchedViewController
:
RecipeDetailViewController *detailViewController = [[RecipeDetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
detailViewController.fetchedResultsController = fetchedResultsController;
[self.navigationController pushViewController:detailViewController animated:animated];
[detailViewController release];
也就是说,在 viewDidUnload 中将 fetchedResultsController 设为 nil 将确保它为 nil。
【讨论】:
酷。谢谢。我想你的最后一句话已经回答了我的问题。很高兴知道! :)【参考方案2】:在这些Secnarion中调用了ViewDidLoad:-
1.当我们通过segue或stoary board id创建对象后推送视图控制器时。
2.在应用程序中创建实例更多时间并一次又一次推送它的情况下,它调用了多个。例如:-如果您像 coaursal 那样实现(在滚动期间需要额外的控制器),那就需要了所以它可以多次调用viewDidLoad。
3.它在所有内存实例(uiviewcontroller 及其子类实例化)时调用,这意味着当我们的视图准备好将地址加载到内存中时。
4.记住只有子类控制器对象被创建..父类对象在正常Secnarion期间从未被实例化。
【讨论】:
【参考方案3】:您必须假设 viewDidLoad 可以被多次调用。如果发送了内存警告,您的视图控制器将从内存中卸载视图,并在下次需要时调用 viewDidLoad。
【讨论】:
明确一点,viewDidLoad
不会被连续多次调用。
这是有道理的。所以,我可以假设如果我在viewDidLoad
和nil
中设置fetchedResultsController
在viewDidUnload
中,那么我不会在viewDidLoad
中不必要地再次设置它?换句话说,viewDidUnload
总是在另一个调用 viewDidLoad
之前被调用,对吗?【参考方案4】:
viewDidLoad
仅在第一次实例化视图时调用。如果您没有在应用程序中每次都重新创建视图控制器,那么您只会调用一次(如果您收到内存警告,则再次调用它,并且视图为零)。
【讨论】:
以上是关于何时调用 viewDidLoad?的主要内容,如果未能解决你的问题,请参考以下文章
UIImagePickerController 在调用 alloc init 时真的很慢