如图所示:
1,当控制器1的view加载完毕调用控制器1的viewDidLoad方法
2,当控制器1的view即将显示调用控制器1的viewWillAppear方法
3,当控制器1的view显示完毕调用控制器1的viewDidAppear方法
假设此时我们从控制器1跳转到另一个控制器2:
4,调用控制器2的viewDidLoad方法表示控制器2的view加载完毕
5,调用控制器1的viewWillDisappear方法表示控制器1的view即将消失
6,调用控制器2的viewWillAppear方法表示控制器2的view即将显示
7,调用控制器1的viewDidDisappear方法表示控制器1的view已经完全消失
8,调用控制器2的viewDidAppear方法表示控制器2的view已经显示完毕
假设此时内存严重不足,XXAppDelegate中的didReceiveMonoryWarning方法被调用:
这时控制器1和控制器2的didReceiveMemoryWarning方法也会被调用,但是由于当前显示的是控制器2的view,所以控制器2的view比控制器1的view优先级要高,这时控制器1的view就会被销毁:
9,调用控制器1的viewWillUnload方法表示控制器1的view即将被销毁
10,调用控制器1的viewDidUnload方法表示控制器1的view已经完全被销毁,
(假设控制器1有一个属性@property (nonatomic, strong) NSArray *persons;
我们应该在控制器1的viewDidUnload方法中释放内存:self.persons = nil;
不应该写:[self.persons release];这是因为如果支持ARC的话会报错。)
假设此时我们要从控制器2返回到控制器1,因为控制器1的view已经被销毁,这时会重新加载控制器1的view,当控制器1的view加载完毕调用控制器1的viewDidLoad方法,就这样开始了循环。。。