本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址

//转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496033.html 

 

本文对应pdf文档下载链接,猛戳— :https://www.evernote.com/shard/s227/sh/ca0d8662-92fc-4e7e-bf87-e66c7abb5d47/1efbf2274b60a4b25aff8422d05e8217

 

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:)
★ 程序正常退出时这个函数才返回。如果进程要被系统强制 杀死,一般这个函数还没来得及返回进程就终止了

 

//转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496033.html


★ 如果设置了主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程序启动原理---iOS-Apple苹果官方文档翻译的更多相关文章

  1. IOS程序启动原理

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

  2. iOS基础 - iOS程序启动原理

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

  3. iOS 程序启动原理

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

  4. iOS程序启动原理(简单)

    1.执行main -> 执行UIApplicationMain UIApplicationMain底层实现 1.创建UIApplication对象 2.创建UIApplication代理对象 3 ...

  5. iOS 程序启动流程

    iOS程序启动原理   技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong   iOS应用程序运行 ...

  6. iOS开发——UI进阶篇(七)程序启动原理、打电话、发短信

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

  7. iOS APP程序启动原理

    UIApplication 程序启动原理 一个应用程序运行就必须要有一个进程,一个进程至少要有一个线程,我们把这个线程叫做主线程,主线程开启之后会开启一个主运行循环,如果不开启一个运行循环,程序开启了 ...

  8. iOS app 程序启动原理

    iOS app 程序启动原理 Info.plist: 常见设置     建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...

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

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

随机推荐

  1. beta阶段——项目复审

    beta阶段--项目复审 小组的名字和链接 优点 缺点 bug 排名顺序 颜罗王team http://www.cnblogs.com/LDLYMteam 界面清新,音乐能够选择是否播放,词汇按照四六 ...

  2. 爬虫学习之-xpath

    1.XPATH使用方法 使用XPATH有如下几种方法定位元素(相比CSS选择器,方法稍微多一点): a.通过绝对路径定位元素(不推荐!) WebElement ele = driver.findEle ...

  3. PHP中普通方法和静态方法

    普通方法(实例方法) 一个类中定义的方法,可以为这个类的所有对象调用的方法.也可以理解为,这个类的所有对象,都各自有自己的一个该方法: 定义形式: class  类名{ function  方法名(形 ...

  4. webgl学习笔记四-动画

    写在前面 建议先阅读下前面我的三篇文章. webgl学习笔记一-绘图单点 webgl学习笔记二-绘图多点 webgl学习笔记三-平移旋转缩放   下面我们将讲解下如何让一个正方形动起来~不断擦除和重绘 ...

  5. C# WebBrowser控件模拟登录

    一.问题点: 1.模拟登录后,如果带有嵌套的iframe嵌套,不好读取iframe内容,可以直接指定iframe抓取网址 2.C# 清除WebBrowser控件的Session和Cookie 参考文档 ...

  6. 第165天:canvas绘制圆环旋转动画

    canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...

  7. CodeForces 860D Wizard's Tour

    题意 给出一张无向图,要求找出尽量多的长度为2的不同路径(边不可以重复使用,点可以重复使用) 分析 yzy:这是原题 http://www.lydsy.com/JudgeOnline/problem. ...

  8. 【bzoj5147】casino 区间dp

    题目描述 赌城拉斯维加斯的米高梅大赌场最近推出了一种新式赌法.它的玩法是由庄家设局(所用赌具是一批五颜六色的筹码),赌徒只要交付一定数额的赌资即可入局.开赌前庄家将手中的筹码依次排开铺成一排构成一局, ...

  9. Contest 9

    A:搜索好难啊根本不会啊. B:暴力枚举给哪段前缀乘,维护一些前后缀最大最小值之类的东西就很好算了. #include<iostream> #include<cstdio> # ...

  10. ORZ hzwer——OI省选算法汇总

    简单列了一点 1.1 基本数据结构 1. 数组 2. 链表,双向链表 3. 队列,单调队列,双端队列 4. 栈,单调栈 1.2 中级数据结构 1. 堆 2. 并查集与带权并查集 3. hash 表 自 ...