iOS程序启动过程笔记
生活随笔
收集整理的這篇文章主要介紹了
iOS程序启动过程笔记
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
CHENYILONG
一、iOS程序的完整啟動(dòng)過(guò)程(有storyboard)
1.先執(zhí)行main函數(shù),main內(nèi)部會(huì)調(diào)用UIApplicationMain函數(shù)
2.UIApplicationMain函數(shù)里面做了什么事情:
1>?創(chuàng)建UIApplication對(duì)象
2>?創(chuàng)建UIApplication的delegate對(duì)象-----MJAppDelegate
3>?開(kāi)啟一個(gè)消息循環(huán)
*?每監(jiān)聽(tīng)到對(duì)應(yīng)的系統(tǒng)事件時(shí),就會(huì)通知MJAppDelegate
4>?為應(yīng)用程序創(chuàng)建一個(gè)UIWindow對(duì)象(繼承自UIView),設(shè)置為MJAppDelegate的window屬性
5>?加載Info.plist文件,讀取最主要storyboard文件的名稱
6>?加載最主要的storyboard文件,創(chuàng)建白色箭頭所指的控制器對(duì)象
7>?并且設(shè)置第6步創(chuàng)建的控制器為UIWindow的rootViewController屬性(根控制器)
8>?展示UIWindow,展示之前會(huì)將添加rootViewController的view到UIWindow上面(在這一步才會(huì)創(chuàng)建控制器的view)
[window addSubview: window.rootViewControler.view];
二、UIWidnow
1.常見(jiàn)方法
1>?成為主窗口
[window makeKeyWindow];
2>?顯示、并且成為主窗口
[window makeKeyAndVisible];
3>?僅僅是顯示窗口
window.hidden =?NO;
2.主窗口
1>?一個(gè)iOS app只能有一個(gè)主窗口(keyWindow),只有keyWindow才能接受文本框的輸入事件
2>?如何訪問(wèn)主窗口
* [UIApplication sharedApplication].keyWindow
3.app中所有的窗口
* [UIApplication sharedApplication].windows
4.屏幕的旋轉(zhuǎn)事件
1>?當(dāng)屏幕旋轉(zhuǎn),UIApplication對(duì)象接受到旋轉(zhuǎn)事件,接著會(huì)通知keyWindow
2>?最終,旋轉(zhuǎn)事件傳遞到UIWidnow身上,UIWindow會(huì)通知rootViewControler,rootViewControler自己會(huì)決定要不要做相應(yīng)的旋轉(zhuǎn)操作
三、UIViewController
1.控制器內(nèi)部的view是延遲加載
1>?用到時(shí)再加載
2>?加載完畢后會(huì)調(diào)用控制器的viewDidLoad方法
2.創(chuàng)建控制器的方式
1>?直接通過(guò)代碼創(chuàng)建
MJOneViewController *one = [[MJOneViewController alloc] init];
//?如果調(diào)用init方法創(chuàng)建控制器(MJTwoViewController),那么在加載控制器view的時(shí)候:
// 1.優(yōu)先查找?“MJTwoView.xib"
// 2.其次再查找?同名?的xib?文件?“MJTwoViewController.xib"
// 3.如果沒(méi)有找到上述的xib文件,會(huì)直接通過(guò)代碼創(chuàng)建一個(gè)空白的view
2>?通過(guò)storyboard創(chuàng)建控制器
*?加載storyboard文件
UIStoryboard *story = [UIStoryboard storyboardWithName:@"sb的文件名"?bundle:nil];
*?從storyboard中創(chuàng)建控制器
//?根據(jù)控制器在storyboard文件中storyboard id來(lái)創(chuàng)建
MJOneViewController *one = [story instantiateViewControllerWithIdentifier:@"控制器的storyboard id"];
//?直接創(chuàng)建箭頭所指的控制器(initial controller)
MJOneViewController *one = [story instantiateInitialViewController];
3>?通過(guò)xib創(chuàng)建控制器
//?創(chuàng)建控制器的view時(shí),就會(huì)加載MJOneViewController.xib文件,并且會(huì)將控制器當(dāng)做是xib的Owner傳入
MJOneViewController *one = [[MJOneViewController alloc] initWithNibName:@"MJOneViewController"?bundle:nil];
//?加載one控制器的view:[[NSBunle mainBundle] loadNibName:@"MJOneViewController" owner:one options:nil];
//?總結(jié):能用storyboard描述控制器的view,就盡量用storyboard
四、導(dǎo)航控制器
1.常見(jiàn)方法
1>?將子控制器vc壓入棧中
[self.navigationController pushViewController:vc animated:YES];
2>?出棧(彈出棧頂控制器)
[self.navigationController popViewControllerAnimated:YES];
3>?直接跳到棧底控制器(回到根控制器)
[self.navigationController popToRootViewControllerAnimated:YES];
2.使用原理
1>?導(dǎo)航控制器內(nèi)部有個(gè)viewControllers棧來(lái)存放所有的子控制器
2>?展示在導(dǎo)航控制器上面的永遠(yuǎn)是棧頂控制器的view
3.一般情況下,導(dǎo)航欄上面顯示什么內(nèi)容,由當(dāng)前棧頂控制器的navigationItem屬性決定
* navigationItem.title :?導(dǎo)航欄的中間標(biāo)題(也可以直接通過(guò)控制器的title屬性設(shè)置標(biāo)題)
* navigationItem.titleView :?導(dǎo)航欄的中間控件
* navigationItem.leftBarButtonItem :?導(dǎo)航欄左邊的按鈕
* navigationItem.rightBarButtonItem :?導(dǎo)航欄右邊的按鈕
4.特殊:導(dǎo)航欄左上角的返回按鈕?文字?由上一個(gè)控制器的navigationItem.backBarButtonItem決定
*?返回按鈕不需要監(jiān)聽(tīng)(默認(rèn)的操作就是出棧)
??chenyilong. Powered by?Postach.io
筆記
一、iOS程序的完整啟動(dòng)過(guò)程(有storyboard)
1.先執(zhí)行main函數(shù),main內(nèi)部會(huì)調(diào)用UIApplicationMain函數(shù)
2.UIApplicationMain函數(shù)里面做了什么事情:
1>?創(chuàng)建UIApplication對(duì)象
2>?創(chuàng)建UIApplication的delegate對(duì)象-----MJAppDelegate
3>?開(kāi)啟一個(gè)消息循環(huán)
*?每監(jiān)聽(tīng)到對(duì)應(yīng)的系統(tǒng)事件時(shí),就會(huì)通知MJAppDelegate
4>?為應(yīng)用程序創(chuàng)建一個(gè)UIWindow對(duì)象(繼承自UIView),設(shè)置為MJAppDelegate的window屬性
5>?加載Info.plist文件,讀取最主要storyboard文件的名稱
6>?加載最主要的storyboard文件,創(chuàng)建白色箭頭所指的控制器對(duì)象
7>?并且設(shè)置第6步創(chuàng)建的控制器為UIWindow的rootViewController屬性(根控制器)
8>?展示UIWindow,展示之前會(huì)將添加rootViewController的view到UIWindow上面(在這一步才會(huì)創(chuàng)建控制器的view)
[window addSubview: window.rootViewControler.view];
二、UIWidnow
1.常見(jiàn)方法
1>?成為主窗口
[window makeKeyWindow];
2>?顯示、并且成為主窗口
[window makeKeyAndVisible];
3>?僅僅是顯示窗口
window.hidden =?NO;
2.主窗口
1>?一個(gè)iOS app只能有一個(gè)主窗口(keyWindow),只有keyWindow才能接受文本框的輸入事件
2>?如何訪問(wèn)主窗口
* [UIApplication sharedApplication].keyWindow
3.app中所有的窗口
* [UIApplication sharedApplication].windows
4.屏幕的旋轉(zhuǎn)事件
1>?當(dāng)屏幕旋轉(zhuǎn),UIApplication對(duì)象接受到旋轉(zhuǎn)事件,接著會(huì)通知keyWindow
2>?最終,旋轉(zhuǎn)事件傳遞到UIWidnow身上,UIWindow會(huì)通知rootViewControler,rootViewControler自己會(huì)決定要不要做相應(yīng)的旋轉(zhuǎn)操作
三、UIViewController
1.控制器內(nèi)部的view是延遲加載
1>?用到時(shí)再加載
2>?加載完畢后會(huì)調(diào)用控制器的viewDidLoad方法
2.創(chuàng)建控制器的方式
1>?直接通過(guò)代碼創(chuàng)建
MJOneViewController *one = [[MJOneViewController alloc] init];
//?如果調(diào)用init方法創(chuàng)建控制器(MJTwoViewController),那么在加載控制器view的時(shí)候:
// 1.優(yōu)先查找?“MJTwoView.xib"
// 2.其次再查找?同名?的xib?文件?“MJTwoViewController.xib"
// 3.如果沒(méi)有找到上述的xib文件,會(huì)直接通過(guò)代碼創(chuàng)建一個(gè)空白的view
2>?通過(guò)storyboard創(chuàng)建控制器
*?加載storyboard文件
UIStoryboard *story = [UIStoryboard storyboardWithName:@"sb的文件名"?bundle:nil];
*?從storyboard中創(chuàng)建控制器
//?根據(jù)控制器在storyboard文件中storyboard id來(lái)創(chuàng)建
MJOneViewController *one = [story instantiateViewControllerWithIdentifier:@"控制器的storyboard id"];
//?直接創(chuàng)建箭頭所指的控制器(initial controller)
MJOneViewController *one = [story instantiateInitialViewController];
3>?通過(guò)xib創(chuàng)建控制器
//?創(chuàng)建控制器的view時(shí),就會(huì)加載MJOneViewController.xib文件,并且會(huì)將控制器當(dāng)做是xib的Owner傳入
MJOneViewController *one = [[MJOneViewController alloc] initWithNibName:@"MJOneViewController"?bundle:nil];
//?加載one控制器的view:[[NSBunle mainBundle] loadNibName:@"MJOneViewController" owner:one options:nil];
//?總結(jié):能用storyboard描述控制器的view,就盡量用storyboard
四、導(dǎo)航控制器
1.常見(jiàn)方法
1>?將子控制器vc壓入棧中
[self.navigationController pushViewController:vc animated:YES];
2>?出棧(彈出棧頂控制器)
[self.navigationController popViewControllerAnimated:YES];
3>?直接跳到棧底控制器(回到根控制器)
[self.navigationController popToRootViewControllerAnimated:YES];
2.使用原理
1>?導(dǎo)航控制器內(nèi)部有個(gè)viewControllers棧來(lái)存放所有的子控制器
2>?展示在導(dǎo)航控制器上面的永遠(yuǎn)是棧頂控制器的view
3.一般情況下,導(dǎo)航欄上面顯示什么內(nèi)容,由當(dāng)前棧頂控制器的navigationItem屬性決定
* navigationItem.title :?導(dǎo)航欄的中間標(biāo)題(也可以直接通過(guò)控制器的title屬性設(shè)置標(biāo)題)
* navigationItem.titleView :?導(dǎo)航欄的中間控件
* navigationItem.leftBarButtonItem :?導(dǎo)航欄左邊的按鈕
* navigationItem.rightBarButtonItem :?導(dǎo)航欄右邊的按鈕
4.特殊:導(dǎo)航欄左上角的返回按鈕?文字?由上一個(gè)控制器的navigationItem.backBarButtonItem決定
*?返回按鈕不需要監(jiān)聽(tīng)(默認(rèn)的操作就是出棧)
??chenyilong. Powered by?Postach.io
- Blog
轉(zhuǎn)載于:https://www.cnblogs.com/ChenYilong/p/3560217.html
總結(jié)
以上是生活随笔為你收集整理的iOS程序启动过程笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 联通域名服务提示
- 下一篇: 为人父母始知天下事---“宝宝哭了”的问