UIWindow

UIWindow是显示控件的基础,系统在加载程序时次序如下:

  1.创建UIWindow,
  2.创建控制器,将控制器设置为UIWindow的跟控制器,
  3.加载控制器的view,
  4.将view上的控件渲染上去,显示出来.
  


 在执行以下代码以前,请进行以下设置:

下面介绍下加载细节:

程序启动时,首先加载main.m,执行以下函数:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

该函数会执行以下步骤:

1.根据principalClassName提供类名创建UIApplication对象

2.创建UIApplicationDelegate对象,并且成为UIApplication对象的代理

3.开启主运行循环.保持程序一直在运行

4.加载info.plist,判断有没有指定main.storyboard,指定了就加载

如果加载storyboard做的事

1.创建窗口

2.加载main.storyboard,并且加载main.storyboard指定的控制器

3.把新建的控制器作为窗口的跟控制器,让窗口显示出来.

*如果没有指定main.storyboard,系统会到APPDelegate.m文件中执行以下方法:

  //程序完成加载时调用,在以下方法中自定义window即可
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//     Override point for customization after application launch.
    return YES;
}

自定义UIWindow


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//     Override point for customization after application launch.
    //创建window属性,并将其赋值给实力属性self.window,否则会在执行完毕后释放
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    //设置window的背景色
    self.window.backgroundColor = [UIColor yellowColor];
    //创建控制器
    UIViewController *vc = [[UIViewController alloc] init];
    //设置控制器view的背景色
    vc.view.backgroundColor = [UIColor whiteColor];
    //将控制器指定为window的跟控制器
    self.window.rootViewController = vc;
    //将window显示出来
    [self.window makeKeyAndVisible];
    
    return YES;
}

自定义UIWindow(加载storyboard)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//     Override point for customization after application launch.
    //创建window属性,并将其赋值给实力属性self.window,否则会在执行完毕后释放
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    //设置window的背景色
    self.window.backgroundColor = [UIColor yellowColor];
    //创建storyboard
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    //从storyboard加载
    ViewController *vc = [storyboard instantiateInitialViewController];
    //设置控制器view的背景色
    vc.view.backgroundColor = [UIColor whiteColor];
    //将控制器指定为window的跟控制器
    self.window.rootViewController = vc;
    //将window显示出来
    [self.window makeKeyAndVisible];
    
    return YES;
}

自定义UIWindow(加载xib)


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //创建window属性,并将其赋值给实力属性self.window,否则会在执行完毕后释放
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    //从xib加载
    OneViewController *vc = [[OneViewController alloc] initWithNibName:nil bundle:nil];
    //将控制器指定为window的跟控制器
    self.window.rootViewController = vc;
    //将window显示出来
    [self.window makeKeyAndVisible];
    
    return YES;
}

注意点:

在使用自定义xib加载时,initWithNibName:后面可以填nil,也可以填xib的名称.
如果填xib的名称,系统会自动搜索匹配的xib.
如果填nil时,系统会自动搜索同名的xib文件,但优先加载不带Controller结尾的(如:OneView.xib),
如果找不到,会再查找xib以控制器名称命名的文件(如:OneViewController.xib),如果再找不到,系统会自动创建空的对象.

官方文档描述如下:

This property contains the value specified at initialization time to the >initWithNibName:bundle: method. The value of this property may be nil.

If you use a nib file to store your view controller'��s view, it is recommended that you
specify that nib file explicitly when initializing your view controller. However, if you >do not specify a nib name, and do not override the loadView method in your custom >subclass, the view controller searches for a nib file using other means. Specifically, it >looks for a nib file with an appropriate name (without the .nib extension) and loads that >nib file whenever its view is requested. Specifically, it looks (in order) for a nib file >with one of the following names:

If the view controller class name ends with the word ‘Controller’, as in MyViewController, >it looks for a nib file whose name matches the class name without the word ‘��Controller’, >as in MyView.nib.

It looks for a nib file whose name matches the name of the view controller class. For >?>example, if the class name is MyViewController, it looks for a MyViewController.nib file.

NOTE
Nib names that include a platform-specific identifier such as ~iphone or ~ipad are loaded >only on a device of the corresponding type. For example, a nib name of >MyViewController~ipad.nib is loaded only on iPad. If your app supports both platform >types, you must provide versions of your nib files for each platform.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • ViewsBecause view objects are the main way your applicati...
    梁光飞阅读 582评论 0 0
  • /* UIViewController is a generic controller base class th...
    DanDanC阅读 1,777评论 0 2
  • 亲爱的老爸: 你好吗? 老妈今天做了核磁共振,结果显示确系复发,胆管处有个小拳头大小的瘤子,已经是晚期了… 医生决...
    老爸我很想你阅读 130评论 0 0
  • 新燕初来显娇羞,未敢展翅剪翠柳。栖身高杆选居处,屋檐衔泥住到秋。
    觅缘人阅读 292评论 0 6
  • 我看到生命与时光流逝, 如细砂穿越我的指缝。 我看到骄阳下的一片阴翳; 给我庇护。 我看到,你 渐行渐远。 我看到...
    baiy2016阅读 122评论 0 0