UIApplication, UIApplicationDelegate,UIApplicationMain的分析

一.UIApplication, UIApplicationDelegate,UIApplicationMain的分析

* UIApplication的核心作用是提供iOS程序运行期间的控制和协调工作。

* 每一个应用程序都有自己的UIApplication对象,而且是一个单例对象。

* 通过UIApplication对象可以进行一些应用级别的操作。

* 演示UIApplication的使用

>获取UIApplication对象UIApplication *app = [UIApplication sharedApplication];

>设置应用图标的红色数字UIApplication的applicationIconBadgeNumber属性。

iOS8更新之后,在设置applicationIconBadgeNumber时提示错误,原因是iOS8之后设置应用

程序的applicationIconBadgeNumber需要用户授权

授权方式如下:

if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 8.0) {

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];

[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

}

>阻止屏幕变暗,慎重使用,缺省为NO 2.0 UIApplication的idleTimerDisabled属性 设置为YES

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

>联网指示器 UIApplication的networkActivityIndicatorVisible属性。

>利用UIApplication管理状态栏(iOS7以前状态栏是由UIApplication管理,iOS7以后交给控制器管理)。

1)、在ios7以后,状态栏默认是交给控制器去管理的,控制器实现下面两个方法就可以控制状态栏的显示、隐藏以及样式

/**

*  隐藏状态栏

*/

- (BOOL)prefersStatusBarHidden {

return YES;

}

/**

*  改变状态栏样式

*/

- (UIStatusBarStyle)preferredStatusBarStyle {

return UIStatusBarStyleLightContent;

}

2)、在ios7以后,状态栏要想交给UIApplication管理,要在Info.plist中设置View controller-based status bar appearance 为 NO

UIApplication *app = [UIApplication sharedApplication];

/****** 无动画 ***********/

app.statusBarHidden = YES;

app.statusBarStyle = UIStatusBarStyleLightContent;

/****** 有动画 ***********/

[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

3)、UIApplication管理状态栏的好处:

*、可以设置动画

*、更灵活,可以随时随地的设置状态栏样式。

> UIApplication的openUrl:方法。(打电话,发信息,发邮件(模拟器执行前面三种操作)、打开网页资源,

打开其他应用(分享)等等)

* URL: 一个资源的唯一路径

* URL的组成: 协议头://主机域名/路径

使用 application打开网络资源的好处:系统自动识别用什么软件打开该资源。

* UIApplicationDelegate对象介绍

>UIApplicationDelegate对象的方法主要工作之一就是跟踪应用程序的状态变化,如进入前台、后台、可见等

// 应用程序启动完毕

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// NSLog(@"应用程序加载完毕");

return YES;

}

// 应用即将变为不活跃状态 [失去焦点]

- (void)applicationWillResignActive:(UIApplication *)application {

//NSLog(@"即将变为不活跃状态 [失去焦点]");

一般在这个方法执行如下操作:

* 暂停正在执行的任务

* 禁止计时器

* 若为游戏应暂停游戏

}

// 应用程序进入后台

- (void)applicationDidEnterBackground:(UIApplication *)application {

//NSLog(@"应用程序进入后台");

一般在这个方法执行如下操作:

* 保存当前应用信息和应用状态

* 保存用户数据(写到沙盒)

* 若为游戏,保存游戏积分

* 废除定时器

}

// 应用即将进入前台

- (void)applicationWillEnterForeground:(UIApplication *)application {

// NSLog(@"即将进入前台");

}

// 应用变为活跃状态

- (void)applicationDidBecomeActive:(UIApplication *)application {

//NSLog(@"应用变为活跃状态[获取焦点]");

}

// 应用即将销毁

- (void)applicationWillTerminate:(UIApplication *)application {

//NSLog(@"应用即将销毁");

}

// 应用接收到内存警告

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {

// NSLog(@"应用接收到内存警告");

}

* UIApplicationMain函数官方描述:

1>  Return Value

Even though an integer return type is specified, this function never returns. When users exits an iOS application by pressing the Home button, the application moves to the background.

返回值

虽然这个函数指定的返回值为整形,但这个函数永远不会返回。当用户按home键退出iOS应用,应用就会进入到后台。

2>  Discussion

This function instantiates the application object from the principal class and instantiates the delegate (if any) from the given class and sets the delegate for the application. It also sets up the main event loop, including the application’s run loop, and begins processing events. If the application’s Info.plist file specifies a main nib file to be loaded, by including the NSMainNibFile key and a valid nib file name for the value, this function loads that nib file.

从官方对该函数的描述可以知道,该函数主要做了以下几件事:

函数原型:

UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName)

1) 根据principalClassName指定的类名创建 application 对象。如果principalClassName为 nil,默认创建UIApplication的对象。

2) 根据delegateClassName指定的类名创建对象,并将该对象设置为应用程序代理。

3) 开启事件循环,包括应用程序的循环运行,并开始处理事件。

4) 如果应用程序的Info.plist文件指定了最主要stroyboard文件,这个函数加载该stroyboard文件。

时间: 2024-11-08 21:46:46

UIApplication, UIApplicationDelegate,UIApplicationMain的分析的相关文章

[iOS基础控件 - 6.10.6] UIApplicationDelegate

A.概念 1.移动app非常容易受到其他的系统.软件事件的干扰,如来电.锁屏 2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件 3.delegate可以处理的事件 (1)app声明周期(启动.关闭) (2)系统事件(来电) (3)紧急事件(内存警告) B.使用 称为delegate的条件:遵守UIApplicationDelegate协议 项目开始会自动创建:AppDelegate 1.delegate方法 1 - (BOOL)application

【程序启动四大对象】UIApplicationDelegate & 程序启动过程

A.概念 1.移动app非常容易受到其他的系统.软件事件的干扰,如来电.锁屏 2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件 3.delegate可以处理的事件 (1)app声明周期(启动.关闭) (2)系统事件(来电) (3)紧急事件(内存警告) B.使用 称为delegate的条件:遵守UIApplicationDelegate协议 项目开始会自动创建:AppDelegate 1.delegate方法 1 - (BOOL)application

1230ios准备 --UIApplication类

1.UIApplication类 每个应用程序都只有一个UIApplication 类的实例对象,运行起来的应用程序就是一个UIApplication对象 UIApplicationMain 创建UIApplication对像的一个单例对象(singleton) Task Getting the App Instance 获取单例对象 Getting the APP Delegate 获取应用程序代理--捕获程序状态 Getting App Windows 获取窗口 Controling and

iOS 从main函数开始

app程序的入口,同样是main函数 main函数为 int main(int argc, char * argv[]),C系语言大多都是这个样子,argc是命令行总的参数个数,argv是参数的数组,值得一提的是argv中第一个参数为app的路径+全名. 然后就是main中的代码 @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } autor

iOS准备程序

UIAppliacation类 每个应用程序都只有一个UIApplication类的实例对象 运行起来的应用程序就是一个UIApplication对象 UIApplicationMain 创建UIApplication对象的一个单例对象(singleton) The role of your app’s application object .handle the initial routing of incoming user events 处理用户行为的一个循环 .dispatches ac

iOS菜鸟成长笔记(1)——第一个iOS应用

前言:阳光小强最近抽时间学习iOS开发,在学习过程中发现了很多有趣的东西也遇到了很多问题,为了在学习过程中能和大家交流,记录下学习的心得和学习成果,所以就有了这一个系列文章,希望这一系列文章能形成一个系统性的东西,让和我一样刚步入iOS开发的朋友少走弯路,用最少的时间获得最大的收益.既然是学习笔记,希望大家多提意见,如果你是iOS大牛多多拍砖. 说起iOS开发很多朋友就会望而却步,有一部分朋友可能是因为设备因素,有一部分朋友可能是因为编程语言是Objective-C的原因,因为这些迟迟没有拿起的

第03章 实现基本交互

MVC框架 1.模型Model:保存应用程序数据的类 2.视图View: 包括窗口,控件等一系列与用户交互的类 3.控制器Controller:把模型和数据绑定在一起的代码. MVC的目标: 1.最大限度的分离这三类代码,使程序中类型清晰,知道自己该干什么 2.帮助确保代码的最大可重用性,否则实现了按钮的类,要在点击时进行特定的计算,那该按钮则只能在此应用中实用. ? 输出口 1.控制器可以通过一种名为输出口的特殊属性,来与nib文件中的对象关联,可以把输出口理解为指向nib文件中对象的指针.

iOS App生命周期及AppDelegate方法

一.APP的生命状态: Not running(未运行):程序未运行 Inactive(未激活):程序在前台运行,但没有接收到事件.在没有事件处理情况下程序通常停留在这个状态. Active ( 激活 ): 程序在前台运行而且接收到了事件.这也是前台的一个正常的模式. Backgroud ( 后台 ): 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会.时间到之后会进入挂起状态(Suspended).有的程序经过特殊的请求后可以长期处于Backgroud状态. Susp

UIApplicationMain、UIApplication详解

一.UIApplicationMain这个函数主要负责三件 事情: 1)从给定的类名初始化应用程序对象,也就是初始化UIApplication或者子类对象的一个实例,如果你在这里给定的是nil,那么 系统会默认UIApplication类,也就主要是这个类来控制以及协调应用程序的运行.在后续的工作中,你可以用静态方法sharedApplication 来获取应用程序的句柄. 2)从给定的应用程序委托类,初始化一个应用程序委托(UIApplicationDelegate).并把该委托设置为应用程序