【Xamarin 开发 IOS --IOS ViewController生命周期】
2015-09-19 16:19
615 查看
ViewController
ViewController是IOS开发中MVC模式中的C,ViewController是view的controller,ViewController的职责主要包括管理内部各个view的加载显示和卸载,同时负责与其他ViewController的通信和协调。在IOS中,有两类ViewController,一类是显示内容的,比如UIViewController、UITableViewController等,同时还可以自定义继承自UIViewController的ViewController;另一类是ViewController容器,UINavigationViewController和UITabBarController等,UINavigationController是以Stack的形式来存储和管理ViewController,UITabBarController是以Array的形式来管理ViewController。
View的加载
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; /*设置Navigation controller*/ XYZFirstViewController *viewController = [[XYZFirstViewController alloc] initWithNibName:nil bundle:nil]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController]; [nav setNavigationBarHidden:YES animated:NO]; self.window.rootViewController = nav; [self.window makeKeyAndVisible]; [viewController release]; [nav release]; return YES; }
View Code
ViewController生命周期
alloc -> initWithNibName -> loadView -> viewDidLoad -> viewWillAppear -> viewDidAppear -> viewWillDisappear -> viewDidDisappear -> dealloc注意viewWillUnload和viewDidUnload已经在ios6被废弃了,因为Clearing references to views is no longer necessary。
注意1.没有viewWillLoad。
注意2.viewDidLoad和viewDidUnload并不是成对的。
启动程序
2014-07-28 17:43:36.124 ViewLifeCycle[4007:a0b] View Did Load
2014-07-28 17:43:36.125 ViewLifeCycle[4007:a0b] View Will Appear
2014-07-28 17:43:36.128 ViewLifeCycle[4007:a0b] View Did Appear
按下Home键,并没有任何记录
双击Home键,删除该程序
2014-07-28 17:43:51.327 ViewLifeCycle[4007:a0b] View Will Disappear
2014-07-28 17:43:51.327 ViewLifeCycle[4007:a0b] View Did Disappear
为什么按下Home键之后没有调用viewWillDisappear和viewDidDisappear呢?
因为在ios4后引入了后台的概念,当按下Home键之后,程序被挂起了,但是该View依然是原来的View,并不是新的。所以只有内存不够的时候或程序被终止的时候,才会调用viewWillDisappear和viewDidDisappear。
View的卸载
loadView v.s. viewDidLoad
view的nib文件为nil时,手工创建视图界面时调用loadView;当view的nib文件存在的时候,初始化工作在viewDidLoad中实现。loadView时view还没有生成,viewDidLoad时,view已经生成了。loadView方法用来创建一个新的view。loadView只会被调用一次,而viewDidLoad可能会被调用多次。
当受到内存警告时,那么此时系统默认操作会检查当前视图控制器的view是否还在使用,如果没在使用且控制器实现了loadView方法,ViewController会将view release并将其指向为nil。
注意,不要在loadView中调用父类方法[super loadView],因为这会影响CPU性能。
注意2,切换前后台不会调用viewWillAppear
参考文章
IOS学习笔记——ViewController生命周期详解IOS开发之界面生命周期(view lifecycle)
相关文章推荐
- 【Xamarin开发IOS-IOS生命周期】
- iOS 推送
- iOS归档与反归档
- iOS开发--iOS9 SearchApi CoreSpotlight的使用
- iOS管理状态栏
- iOS9中Bitcode的介绍及配置
- iOS runtime方法详解之类操作
- iOS 单例模式
- IOS开发—本地化
- iOS 开发笔记-开发技巧
- IOS的四种数据存储方式及优劣
- IOS 将时间字符串转换为时间戳
- IOS 动画效果
- iOS 实时监听textField的值的改变
- GitHub 上都有哪些值得关注学习的 iOS 开源项目?
- IOS 屏幕尺寸、分辨率、点之间的相互关系
- iOS Label添加删除线
- 另一种控制器切换的方式→Modal
- iOS软件开发 错误集之不能使用CGRect和CGFloat解决办法
- 制作iOS Ad-Hoc测试应用