ios view的创建过程
来源:互联网 发布:windows改变图标 编辑:程序博客网 时间:2024/04/30 01:57
师傅发我一堆view的创建函数,目的让我知道view的创建过程。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self;}- (void)viewWillAppear:(BOOL)animated{}- (void)viewDidAppear:(BOOL)animated{}- (void)loadView{}- (void)layoutSublayersOfLayer:(CALayer *)layer{}- (void)viewWillLayoutSubviews{} - (void)viewDidLoad{}
拿到这函数我也没多想就创建了一个single View application 然后创建一个viewcontroller 就将师傅的函数复制进去,然后在AppDelegeteD.m文件中写
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = [[MyViewController alloc]init]; [self.window makeKeyAndVisible]; // Override point for customization after application launch. return YES;}
然后运行 。。。。。。凉了。。。出现错误了;
启动起来黑屏,然后是报这样一个错误Application windows are expected to have a root view controller at the end of application launch
2014-08-13 15:16:45.924 任务1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.925 任务1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.925 任务1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.926 任务1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.927 任务1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.927 任务1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.928 任务1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.928 任务1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.929 任务1副本[2629:60b] Application windows are expected to have a root view controller at the end of application launch
无解 ,网上搜得所有方案都不对。我把焦点放在了 self.window.rootviewcontroller = ....这句话上了;
我开始想它出错的原因,为什么这些方法调用了好几遍,单步调试发现这些函数不止是在初始化的init时候调用。
我又新建了一个viewcontroller就加了一个背景色,结果能运行,我又试着将师傅给的代码贴上去,结果又出现错误了。
我就开始挨个试是什么出现了问题,最后让我找到了原因出在-(void)loadview这个函数上面;
我又开始查询这个函数,最后从M了个J老师这获得了答案:
原来在每次调用view的时候,如果view为空,则会调用这个函数;他的作用就是来创建一个view,首先加载xib 如果没有xib 则自动创建一个大小320*480 的空白view;
在程序的
-(void)loadview 中加入了[super loadview];后程序能够运行了;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self;}-(id)init{ if(self = [super init]) { self.view.frame=[[UIScreen mainScreen]bounds]; self.view.backgroundColor = [UIColor orangeColor]; } return self;}- (void)loadView{ // [super loadView]; NSLog(@"%s",__FUNCTION__);}- (void)viewDidLoad{ [super viewDidLoad]; NSLog(@"%s",__FUNCTION__); // Do any additional setup after loading the view from its nib.}- (void)viewWillAppear:(BOOL)animated{ NSLog(@"%s",__FUNCTION__);}- (void)viewDidAppear:(BOOL)animated{ NSLog(@"%s",__FUNCTION__);}- (void)layoutSublayersOfLayer:(CALayer *)layer{ NSLog(@"%s",__FUNCTION__); }- (void)viewWillLayoutSubviews{ NSLog(@"%s",__FUNCTION__);}
运行结果:
2014-08-13 15:35:54.783 任务1副本[2660:60b] -[YouVC loadView]2014-08-13 15:35:54.783 任务1副本[2660:60b] -[YouVC viewDidLoad]2014-08-13 15:35:54.784 任务1副本[2660:60b] -[YouVC viewWillAppear:]2014-08-13 15:35:54.785 任务1副本[2660:60b] -[YouVC viewWillLayoutSubviews]2014-08-13 15:35:54.835 任务1副本[2660:60b] -[YouVC viewDidAppear:]
这个就是 创建view的时候,相关view创建函数的运行次序:
M了个J老师的博客 http://www.cnblogs.com/mjios/archive/2013/02/26/2933667.html里面详细讲述了这几个函数;
3 0
- ios view的创建过程
- View视图的创建过程
- ViewController的View创建过程
- 一个View的创建过程
- ViewController的view的创建过程
- Android应用程序窗口View的创建过程
- iOS view.frame的变化过程
- iOS中不同view的创建方法
- iOS开发之控制器View的创建
- [IOS]创建控制器View的优先级关系
- ios view controller 加载 卸载view的过程
- ios app: view: 怎样创建自己的view
- android 创建View过程分析
- android中view创建过程
- Android 从Activity创建开始,绘制View的过程
- Activity启动过程中View的创建、绑定与绘制
- android graphic(21)—view tree的创建过程
- iOS 的本地化使用和创建过程
- Git学习研究小总结
- 浏览器缓存详解:expires,cache-control,last-modified,etag详细说明
- Android NDK 开发教程二:概述
- hadoop集群搭建过程中所遇问题总结
- iOS开发-NSData与NSMutableData使用与分析
- ios view的创建过程
- 继承中的非虚成员函数
- Eclipse 插件
- CCI 9.4 集合的所有子集
- 看《软件测试技术大全:测试基础 流行工具 项目实践(第二版)》。。
- ios Game-Center 开发 part1
- hdu-1811 Rank of Tetris 并查集+拓扑
- Yii 不完全解决方案(一)
- 使用ubuntuliveCD重新安裝grub2