抠点底层的东西--程序启动的过程吧.

秀一下自己的专业性吧.O(∩_∩)O~

说的不好,请指点:
程序启动,和C语言一样是先加载.m文件,那我们看看main.m文件中的内容吧;

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

内部启动一个叫UIApplicationMain()程序
这里附上苹果的官方说明

Most of the work is done by the UIApplicationMain function, which is automatically called in your project’s main.m source file. The UIApplicationMain function creates an application object that sets up the infrastructure for your app to work with the iOS system. This includes creating a run loop that delivers input events to your app.

大致意思是说:启动过程中很多工作上交给UIApplicationMain这个函数来做的.会创建一个application的对象去设置你IOS系统的公共部分,并且包括创建一个runloop用来进行实践的传递.

// 这个叫UIApplicationMain会创建两个重要的组件 
The call to UIApplicationMain creates two important initial components of your app:
// 一个是 UIApplication的实例对象,application
An instance of the UIApplication class, called the application object.
// 主要用在处理 事件的循环 和调整别的优先级高的app 行为,虽然定义在UIKit框架中,但并不要求你自己去定义.
The application object manages the app event loop and coordinates other high-level app behaviors. The UIApplication class, defined in the UIKit framework, doesn’t require you to write any additional code to get it to do its job.
// 另一个是APPDelegate,是app的代理
An instance of the AppDelegate class, called the app delegate.

// Xcode创建这个类为你设置单一视图应用程序模板的一部分。应用程序委托创建窗口,应用程序的内容,并提供一个地方应对状态转换中的应用。应用程序委托你编写定制app-level代码。像所有的类,在AppDelegate类中定义两个源代码文件在你的应用程序:在接口文件,AppDelegate。AppDelegate.m h,实现文件

Xcode created this class for you as part of setting up the Single View Application template. The app delegate creates the window where your app’s content is drawn and provides a place to respond to state transitions within the app. The app delegate is where you write your custom app-level code. Like all classes, the AppDelegate class is defined in two source code files in your app: in the interface file, AppDelegate.h, and in the implementation file, AppDelegate.m.

As your app starts up, the application object calls predefined methods on the app delegate to give your custom code a chance to do its job—that’s when the interesting behavior for an app is executed.

通过查看官方文档,将把程序启动的过程做一个总结
1.执行main.m
2.执行UIAppliMain();
3.创建UIApplication和APPDelegate的实例对象
4.开启主运循环执行app任务(让app不被关闭)
5.加载info.plist.(对不住了,我不知道这段文档写在那个地方了)(其实info中的内容就是预加载项,只不过是以plist文件写成的).
6.根据info.plist中的内容加载对应的Main(显示控制器).

在这里就要分情况了:
1.设置了Main, (并在storyboard的中勾选了


Snip20150916_4.png

)
[千万不要小看这个属性,当初我可是吃了不小的亏.](属性是设置显示的原始页面. 就是是否显示的意思)
那就直接加载Main.storyboard就行了.

2.没有的话(我很喜欢自己去创建,很有成就感,O(∩_∩)O哈哈~).
我先说明方式,在详细说明
自己手动添加. 刚才说appdelegate是用于处理应用的一些固定的行为, 在里面我们可以看到这么一个方法:-application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 应用完成加载后,调用 . 那我们可以在这里面去创建窗口,并且加载控制器. (因为这个代理中本来就给了我们一个window属性.(窗口))

简单的创建代码附上

// 建立窗口
 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
// 设置根控制器
    UIViewController *vc = [[UIViewController alloc]init];
    vc.view.backgroundColor = [UIColor redColor];
    self.window.rootViewController = vc;
// 显示窗口
    [self.window makeKeyAndVisible];

现在详细说明一下appdelegate中的一些方法

// 加载应用完成时调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    return YES;
}
// 程序失去焦点,也就是即将进入后台
- (void)applicationWillResignActive:(UIApplication *)application {
 
}
// 程序进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {

}
// 程序即将进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application {

}
// 程序获得焦点
- (void)applicationDidBecomeActive:(UIApplication *)application {

}
// 程序进入终端(一般式有东西打扰,打电话什么的)
- (void)applicationWillTerminate:(UIApplication *)application {

}

打字好累,请允许我拷贝我以前写过的一些笔记:

主main函数中调用了 UIApplicationMain函数其中后两个参数是: principalClassName:UIApplication的类名(传空就是默认)
delegateClassName:代理的类名.

执行过程如下:
1.创建UIApplication对象.
2.创建UIApplication的代理对象,并且设置为UIApplication的代理
3.开启一个主运行循环,处理事件
4.加载info.plist文件,判断是否有Main.storyboard描述的控制器
5.加载Main.storyboard
(内部自动执行) (如果没有可以手动去进行设置.)
5.1 创建窗口
5.2 加载Main.storyboard,初始化stroyboard描述的控制器
5.3 设置窗口的根控制器,并且显示窗口

手动设置:

  1. 创建窗口,并引用.
    2.设置窗口的根控制器(不能直接添加view,必须设置为根控制器,负责不能出现转屏功能)
    3.设置窗口为应用程序的主窗口(这样才能显示)

关于窗口—> 窗口是有优先级的 (而且程序默认就有一个窗口的设置(状态栏))
窗口的优先级windowLevel 层级: alert(2000) > statusBar(1000) > normal(0)

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

推荐阅读更多精彩内容