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