现在的位置: 首页 > 综合 > 正文

关于 VC 执行顺序

2018年05月12日 ⁄ 综合 ⁄ 共 1064字 ⁄ 字号 评论关闭

 
 1.对于单独的一个试图控制器,它的执行顺序如下:
 (1).如果有XIB文件的话,首先加载XIB文件,即先执行- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}方法
 (2).没有xib文件的话,会执行- (void)viewDidLoad{}方法(还有一个loadview方法,但是一般不在这个方法里面写代码)
 (3).接下来 会执行-(void)viewWillAppear:(BOOL)animated{}
 (4).再下来会执行-(void)viewDidAppear:(BOOL)animated{}
 当要离开此试图控制器时 会执行
(5)-(void)viewWillDisappear:(BOOL)animated{}
 (6).最后-(void)viewDidDisappear:(BOOL)animated{}
 所以基本我们的业务逻辑都是根据上面的大致顺序来进行。
 
2.对于两个视图控时器,比如VC1 和VC2 ,VC1通过导航push到VC2,那么执行顺序又是什么呢?
 (1)首先 如果VC2有XIB文件的话,先执行VC2- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}方法
 (2)VC2没有XIB文件的话,首先会执行VC2的- (void)viewDidLoad{}方法
 (3).接下来会执行VC2的-(void)viewWillAppear:(BOOL)animated{}方法
 (4).然后会执行VC1的-(void)viewWillDisappear:(BOOL)animated{}
 (5).然后是VC1的-(void)viewDidDisappear:(BOOL)animated{}
 (6).下来会接着执行VC2的(void)viewDidAppear:(BOOL)animated{}

 3.另外关于两个的试图控制器间属性传参,参数的赋值 是写在push前还是后也是有讲究的哈。其实还是和上面执行顺序有关。如果传递的参数想在- (void)viewDidLoad{}方法或- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{}方法中使用,属性的赋值要写在push之前,否则你会发现传过来的是个空值。。。

抱歉!评论已关闭.