iOS程序启动原理

 

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong

 

iOS应用程序运行流程

UIApplicationMain

★ 在main.m的main函数中执行了UIApplicationMain这个方法,这 是ios程序的入口点 

intUIApplicationMain(intargc,char*argv[], NSString *principalClassName, NSString *delegateClassName) 

★ argcargv:ISO C标准main函数的参数,直接传递 给UIApplicationMain进行相关处理即可 

★ principalClassName:指定应用程序类,该类必须 是UIApplication(或子类)。如果为nil,则用UIApplication类 作为默认值 

★ delegateClassName:指定应用程序类的代理类,该类必须遵 守UIApplicationDelegate协议 

UIApplicationMain

★ 此函数会根据principalClassName创建UIApplication 对象,根据delegateClassName创建一个delegate对象 ,并将该delegate对象赋值给UIApplication对象中 的delegate属性

★ UIApplication对象会依次给delegate对象发送不同的 消息,接着会建立应用程序的main runloop(事件循环) ,进行事件的处理(首先会调用delegate对象的

application:didFinishLaunchingWithOptions:)

★ 程序正常退出时这个函数才返回。如果进程要被系统强制 杀死,一般这个函数还没来得及返回进程就终止了

★ 如果设置了主xib文件(在Info.plist中指定 ,key是NSMainNibFile),就会在主xib文件中 寻找UIApplication和连接它的delegate。因 此在主xib文件中,File’s Owner必须 为UIApplication(或子类),并且建立一个遵 守UIApplicationDelegate的delegate对象, 建立UIApplication和delegate对象的关联关系

四大对象关系图

iOS中的mvc

 

 

UIApplication

★ UIApplication是应用程序的核心,每一个程序在运行期必须 有UIApplication(或子类)的一个实例(有且仅有一个),通 过[UIApplication sharedApplication]可以得到这个单例实例 的指针

★ UIApplication帮助管理应用程序的生命周期,而它通过delegate 来履行这个任务

★ UIApplication可以接收事件,把所有用户事件都放入队列,逐个 处理,它会发送当前事件给一个合适的目标控件进行处理。它还将部分 事件转给delegate对象来处理,delegate可处理的事件包括:应用程 序的生命周期事件(如程序启动和关闭)、系统事件(如来电)

 

UIApplication

★ [UIApplication sharedApplication].windows: 在本应用中打开的UIWindow列表,这样就可以接触应用

中的任何一个UIView对象

★ [UIApplication sharedApplication].keyWindow: 用来接收键盘以及非触摸类的消息事件的UIWindow,而

且程序中每个时刻只能有一个UIWindow是keyWindow。 如果某个UIWindow内部的文本框不能输入文字,可能是 因为这个UIWindow不是keyWindow

 

下面是这个类的一些功能:

1.设置icon上的数字图标

 

//设置主界面icon上的数字图标,在2.0中引进, 缺省为0

 

[UIApplicationsharedApplication].applicationIconBadgeNumber = 4;

2.设置摇动手势的时候,是否支持redo,undo操作

 

//摇动手势,是否支持redo undo操作。

 

//3.0以后引进,缺省YES

 

[UIApplicationsharedApplication].applicationSupportsShakeToEdit =YES;

 

3.判断程序运行状态

 

//判断程序运行状态,在2.0以后引入

 

/*

 

UIApplicationStateActive,

 

UIApplicationStateInactive,

 

UIApplicationStateBackground

 

*/

 

if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){

 

NSLog(@"程序在运行状态");

 

}

4.阻止屏幕变暗进入休眠状态

 

//阻止屏幕变暗,慎重使用,缺省为no 2.0

 

[UIApplicationsharedApplication].idleTimerDisabled =YES;

 

(慎重使用本功能,因为非常耗电)

5.显示联网状态

 

//显示联网标记 2.0

[UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;

 

6.在map上显示一个地址

 

NSString* addressText =@"1 Infinite Loop, Cupertino, CA 95014";

 

// URL encode the spaces

 

addressText= [addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

 

NSString* urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];

 

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlText]];

 

7.发送电子邮件

 

NSString *recipients =@"mailto:first@example.com?cc=second@example.com,third@example.com&subject=Hello from California!";

 

NSString *body =@"&body=It is raining in sunny California!";

 

NSString *email = [NSStringstringWithFormat:@"%@%@", recipients, body];

 

email = [emailstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:email]];

8.打电话到一个号码

 

// Call Google 411

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://8004664411"]];

 

9.发送短信

 

// Text to Google SMS

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sms://466453"]];

 

10.打开一个网址

 

// Lanuch any iPhone developers favsite

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];

 

 

 

 

UIApplicationDelegate

★ 在开发过程中,UIApplication是一个非常重要的全局对象。但在实 际编程中我们并不直接和UIApplication对象打交道,而是和其代理 打交道,它的代理必须遵守UIApplicationDelegate协议,代理

iOS 程序启动流程的更多相关文章

  1. iOS程序启动流程(留有问题)

    程序的简单运行流程: 读取Main.storyboard文件 创建箭头所指的ViewController对象 根据storyboard文件中描述创建ViewController的UIView对象 将U ...

  2. iOS程序启动原理---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  3. IOS程序启动原理

    1.Info.plist 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 常见属性(红色 ...

  4. iOS程序启动的过程及原理

    iOS程序启动的过程及原理 文字部分 先执行main函数,main内部会调用UIApplicationMain函数 UIApplicationMain函数里面做了什么事情??? 1> 创建UIA ...

  5. IOS程序启动的过程

    IOS程序启动按照以下5个步骤执行 1.main函数 IOS程序启动首先执行main函数 2.UIApplicationMain 执行main函数中的UIApplicationMain函数,这个函数会 ...

  6. arm裸机程序启动流程

    arm裸机程序启动流程 1373 Linux系统的引导: 一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader) ...

  7. iOS程序启动过程

    First, the function creates the main application object (step 3 in the flowchart). If you specify ni ...

  8. 深入理解UIApplication和ios程序启动过程

    在深入理解UIApplication前我们先了解ios程序的启动过程: UIApplication类在ios里面为app的管理和协调提供一个集中的点,每一个app有一个UIApplication的实例 ...

  9. iOS 程序启动原理

    很多工作一段时间的iOS程序员,总是每天沉浸在代码里,大家总是按照xcode的规定生成项目,然后就开始码代码了,但是大家知道app背后的启动过程吗?当点击程序图标启动程序开始到退出,程序在运行过程中到 ...

随机推荐

  1. MAVEN项目标准目录结构 ;

    http://blog.csdn.net/lengyue_wy/article/details/6718637 版权声明:本文为博主原创文章,未经博主允许不得转载.    1.标准目录结构: src ...

  2. 【计算机网络】NAT:网络地址转换

    NAT(Network Address Translation,网络地址转换)是1994年提出的.当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因 ...

  3. appium1.6.3/1.6.4/1.6.5版本下如何支持安卓下ByName定位

    1. 换其他定位方式,比如用xpath代替 2. 使用ByAccessibilityId代替,感觉没什么效果 一招修改源码解决问题根源,修改方法如下: 找到你的appium\node_modules\ ...

  4. (一)Quartz2.2.1 简单例子

    转载至http://blog.csdn.net/a4307515/article/details/46985533 1.关键接口 Scheduler,任务调度的API:它可以用来启动或者终止任务等. ...

  5. jsp - redirect重定向 / forward转发

    redirect:请求重定向: 客户端行为,本质上为2次请求,地址栏改变,前一次请求对象不保存, 所以请求携带的数据会丢失. 举例:你去银行办事(forward.jsp),结果告诉你少带了东西,你得先 ...

  6. Cornfields POJ - 2019(二维RMQ板题)

    就是求子矩阵中最大值与最小值的差... 板子都套不对的人.... #include <iostream> #include <cstdio> #include <sstr ...

  7. XML格式化加载的时候提示Content is not allowed in prolog. Nested exception: Content is not allowed in prolog

    原因:原本是.xml文件格式的内容,被你用右键,文本编辑,保存,导致格式不认了. 解决方法:下载个notepad+ 工具,用这工具打开,修改,编辑,保存,即可被继续认作xml格式.

  8. 关于监听与控制设备旋转全解析(UIDeviceOrientationDidChangeNotification)

    一类情况: 初始化app的方向,比如只支持横屏或者竖屏.下面举例只支持竖屏的案例 在app的属性里面手动设置 上面标注了该app支持的方向种类,要是在app里支持Portrait方向,还需要添加以下代 ...

  9. 【BZOJ1565】【NOI2009】植物大战僵尸(网络流)

    [BZOJ1565][NOI2009]植物大战僵尸(网络流) 题面 BZOJ 洛谷 题解 做了这么多神仙题,终于有一道能够凭借自己智商能够想出来的题目了.... 好感动. 这就是一个比较裸的最小割模型 ...

  10. BZOJ1264 [AHOI2006]基因匹配Match 【LCS转LIS】

    题目链接 BZOJ1264 题解 平凡的\(LCS\)是\(O(n^2)\)的 显然我们要根据题目的性质用一些不平凡的\(LCS\)求法 这就很巧妙了,, 我们考虑\(A\)序列的每个位置可能匹配\( ...