控制器创建的生命周期
1. 如果从stroryBoard 中产生一个controller,那么会先调用initWithCoder:, awakeFromNib, loadView,viewDidLoad,viewWillAppear,viewWillLayoutSubviews,不会调用init方法。 2. 如果从代码中产生一个ViewController,那么会调用init方法,loadView,viewDidLoad,viewWillAppear,viewWillLayoutSubviews等自定义view创建的生命周期
1. 如果是从nib中产生,那么会调用view的initWithCoder:,awakeFromNib,layouSubviews方法,不会调用initWithFrame: 方法 2. 如果代码产生,那么会调用view的init ,initWithFrame: ,layoutSubviews方法控制器view的加载方式:
1. 调用loadView方法,如果实现的话进行调用,重写loadView方法,很容易造成错误,注意loadView的调用时机,loadView常用来手动添加view 2. 查找StoryBoard,看是否包含该控制器,如果有,加载storyBoard 中的view 3. 查找xib 文件,先查找该控制器名字Controller前面的字符串组成的名字的xib 文件,如果没有找到,那么查找与Controller 同名的xib 文件 4. 如果没有找到,那么系统产生一个空白的view控制器和控制器自带的nib之间的关系:
1. 使用init 方法初始化conroller的时候,先调用initWithNib:bundle方法,然后是init方法,然后直接调用loadView方法,viewDidLoad,viewWillAppear,viewWillLayoutSubviews,viewDidLayoutSubviews,viewDidAppear等等方法,注意没有调用controller的initWithCoder:,awakeFromNib方法 。更正:我发现连当我自己调用loadView 方法时候,viewDidLoad都没有调用,然后在initWIthNib:bundle里面初始化相关的IB连接发现居然是无效的,我在viewDidLayouSubviews:方法中初始化时有效地;所以以后还是不要手动调用loadView方法了 2. 使用initWithNib:bundle方法初始化controller,不会调用init,然后直接调用loadView方法,viewDidLoad,viewWIllAppear,viewWillLayoutSubviews,viewDidLayoutSubviews,viewDidAppear等方法,不会调用controller的initWithCoder:,awakeFromNib等方法,这点很容易犯错有时候只有一个xib自定义的view 添加到控制器view的时候,我们可以直接将该xib 作为控制器的view, 设置owner; 也可以在loadview中将新的view 赋值给viewController.view
转载于:https://www.cnblogs.com/peaceWang/p/5346726.html
本文深入探讨了iOS应用中控制器的生命周期方法调用顺序,包括从Storyboard和代码创建控制器的区别,以及自定义视图的创建过程。重点分析了不同场景下控制器和视图的加载方式,并揭示了控制器与自定义视图之间的关系,特别是初始化和布局过程中的关键点。
7057

被折叠的 条评论
为什么被折叠?



