loadView 尽管不直接调用该方法,如多手动创建自己的视图,那么应该覆盖这个方法并将它们赋值给试图控制器的 view 属性。
viewDidLoad 只有在视图控制器将其视图载入到内存之后才调用该方法,这是执行任何其他初始化 *** 作的入口。
viewDidUnload 当试图控制器从内存释放自己的方法的时候调用,用于清楚那些可能已经在试图控制器中创建的对象。
viewVillAppear 当试图将要添加到窗口中并且还不可见的时候或者上层视图移出图层后本视图变成顶级视图时调用该方法,用于执行诸如改变视图方向等的 *** 作。实现该方法时确保调用 [super viewWillAppear:]
viewDidAppear 当视图添加到窗口中以后或者上层视图移出图层后本视图变成顶级视图时调用,用于放置那些需要在视图显示后执行的代码。确保调用 [super viewDidAppear: ] 。
ViewController1跳转ViewController2 输出结果
ViewController1 - loadView 加载视图
ViewController1 - viewDidLoad 加载完成视图
ViewController1 - viewWillAppear 将要显示视图
ViewController1 - viewWillLayoutSubviews 将要开始布局子控件
ViewController1 - viewDidLayoutSubviews 布局子控件完成
ViewController1 - viewDidAppear 显示视图完成
ViewController2 - loadView
ViewController2 - viewDidLoad
ViewController1 - viewWillDisappear 视图将要消失
ViewController2 - viewWillAppear
ViewController2 - viewWillLayoutSubviews
ViewController2 - viewDidLayoutSubviews
ViewController1 - viewDidDisappear 视图已经消失
ViewController2 - viewDidAppear
一个视图想要显示出来,首先就需要先加载出来;然后才能够显示;所以 viewDidLoad 一定是在 viewWillAppear 之前调用;
控制器跳转时生命周期方法时交替调用的,以保证流畅性和很好的用户体验;
如果是present方式的modalPresentationStyle是 UIModalPresentationFullScreen ,生命周期方法和push相同
如果是present方式的modalPresentationStyle不是UIModalPresentationFullScreen,只会走ViewController2自己的生命周期方法,ViewController1因为没有完全消失所以不会走生命周期方法
ViewController2 - loadView 加载视图
ViewController2 - viewDidLoad 加载完成视图
ViewController2 - viewWillAppear 将要显示视图
ViewController2 - viewWillLayoutSubviews 将要开始布局子控件
ViewController2 - viewDidLayoutSubviews 布局子控件完成
ViewController2 - viewDidAppear 显示视图完成
注意:还有最后一个生命周期方法 dealloc
相信大部分人都知道单个viewController的生命周期,在这里简单提下:
1、loadView
2、viewDidLoad
3、viewWillAppear
4、viewDidAppear
5、viewWillDisappear
6、viewDidDisappear
B viewDidLoad ——> 2 A viewWillDisappear ——> 3 B viewWillAppear ——> A ViewDidDisappear ——> B viewDidAppear
B viewWillDisappear ——> 2 A viewWillAppear ——> 3 B viewDidDisappear ——> 4 viewDidAppear
看到网络层请求的时候,都比较关注什么时候取消请求,什么时候获取数据,又在什么时候去展示数据。这是很多开发者都比较关注的话题。在这里简单分享一下。
网上的资料很多,我们见到的最多的都是view的生命周期从一开始到最后销毁。但是很少有页面间的view生命周期是什么流程的。了解view的生命周期有助于我们选择更加合适的时机去进行view的 *** 作和网络的请求。
View 生命周期
第一个 ViewController 第二个SViewController 第三个TViewController
View的展示及销毁情况
第一个就是
initialize -->init --> viewDidLoad-->viewWillAppear-->viewWillLayoutSubviews-->viewDidLayoutSubviews-->viewDidAppear
然后进入第二个VC
initialize -->init --> viewDidLoad-->此时第一个VC viewWillDisappear-->viewWillAppear-->viewWillLayoutSubviews-->viewDidLayoutSubviews-->此时第一个VC viewDidDisappear-->viewDidAppear
具体的Log如下:
Method: +[SViewController initialize]
Method: -[SViewController init]
Method: -[SViewController viewDidLoad]
Method: -[ViewController viewWillDisappear:]
Method: -[SViewController viewWillAppear:]
Method: -[SViewController viewWillLayoutSubviews]
Method: -[SViewController viewDidLayoutSubviews]
Method: -[ViewController viewDidDisappear:]
Method: -[SViewController viewDidAppear:]
然后进入第三个VC
initialize -->init --> viewDidLoad-->此时第二个VC viewWillDisappear-->viewWillAppear-->viewWillLayoutSubviews-->viewDidLayoutSubviews-->此时第二个VC viewDidDisappear-->viewDidAppear
Method: +[TViewController initialize]
Method: -[TViewController init]
Method: -[TViewController viewDidLoad]
Method: -[SViewController viewWillDisappear:]
Method: -[TViewController viewWillAppear:]
Method: -[TViewController viewWillLayoutSubviews]
Method: -[TViewController viewDidLayoutSubviews]
Method: -[SViewController viewDidDisappear:]
Method: -[TViewController viewDidAppear:]
上面是View的开始,下面看一下view的依次释放。
返回上一个VC
首先是第三个VC(TViewController)调用viewWillDisappear
然后第二个VC(SViewController)即将展示view(viewWillAppear)
在第二个即将展示之后,第三个VC视图消失完成viewDidDisappear
在第三个消失之后,第二个VC展示完成viewDidAppear
最后进行第三个VC dealloc
Method: -[TViewController viewWillDisappear:]
Method: -[SViewController viewWillAppear:]
Method: -[TViewController viewDidDisappear:]
Method: -[SViewController viewDidAppear:]
Method: -[TViewController dealloc]
返回第一个VC
首先是第二个VC(SViewController)调用viewWillDisappear
然后第一个VC(ViewController)即将展示view(viewWillAppear)
在第一个即将展示之后,第二个VC视图消失完成viewDidDisappear
在第二个消失之后,第一个VC展示完成viewDidAppear
最后进行第二个VC dealloc
Method: -[SViewController viewWillDisappear:]
Method: -[ViewController viewWillAppear:]
Method: -[SViewController viewDidDisappear:]
Method: -[ViewController viewDidAppear:]
Method: -[SViewController dealloc]
最后再进行一次Push *** 作
我们再观察一下View的生命周期情况
Push
Method: -[SViewController init]
Method: -[SViewController viewDidLoad]
Method: -[ViewController viewWillDisappear:]
Method: -[SViewController viewWillAppear:]
Method: -[SViewController viewWillLayoutSubviews]
Method: -[SViewController viewDidLayoutSubviews]
Method: -[ViewController viewDidDisappear:]
Method: -[SViewController viewDidAppear:]
到此,差不多我们都有一个整体认识了,对view的生命周期有一个更加清晰的了解。Demo就不传了,很简单的,自己写一下方法,从新定义一下log什么都看到了。
有什么错误的地方欢迎各位大大指点与批评
最近在做自己的framework静态库,需要用到支付宝和微信支付,支付回调又是在Appdelegate中拿到 所以想找一种替代或者说捕获Appdelegate声明周期的方法,苦寻之后发现有大神处理过类似的事情,所以就尝试了一下,首先感谢大神的文章。
文章地址:( >
Block内存管理的规则:
1,Block指针会在方法或函数结束后release掉,此时内存是储存在Stack里。
2,如果要在保存Block指针,需要用到copy方法(类似于NSObject),此时内存储存在Heap里。
3,Block函数体里的变量会被自动Retain,等Block结束掉后会Release。
4,__block 前缀标明的变量,不会自动Reatin。
Block Copy时的注意事项:
1,在block里如果直接 *** 作self,则self会自动retain。
2,在block里如果 *** 作类变量,则变量所属的类会自动retain
以上就是关于ios,视图控件器的生命周期谁知道,急求全部的内容,包括:ios,视图控件器的生命周期谁知道,急求、iOS 关于控制器的生命周期、iOS UIViewController之间跳转时的生命周期函数执行顺序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)