通常我们用Push在进行控制器跳转的时候,大家的一般做法是
UIViewController *vc = [[UIViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
这里其实是有一个陷阱,通常我们会误认为控制器初始化init之后,会根据控制器的生命周期执行去下
步骤:
init,
loadView,
viewDidLoad,
......,
但是这里的话UIViewController *vc = [[UIViewController alloc] init];只是执行到了init这一步骤,在进行控制器跳转[self.navigationController pushViewController:vc animated:YES];的时候才会从loadView开始执行下去。
通常我们给控制器传值,有一个习惯性的做法,给目标控制器传入一个模型,在模型的setter方法中给控件赋值。比如我们从Xib中创建视图可能会用到这样的做法,但是这里的话是不能成功的,因为在赋值时控件还没有初始化,是nil值,根本无法赋值,哪怕我们把模型赋值放在push方法之后也是不行的,这里有一个小技巧,就是通过延时执行赋值的方式,但是这样并不是很安全的。所以解决的方法是在setter方法中不要给控件赋值,而是在viewDidLoad中再去赋值。