简介:
1,UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序。
2,每一个应用都有自己的UIApplication对象,而且是单例的,如果用alloc方法新建一个,会报错
3,获得UIApplication 的方法:[UIApplication sharedApplication]
4,一个ios程序启动后创建的第一个对象就是UIApplication对象,而且只有一个
5,利用Application对象,能进行一些应用级别的操作
1,显示图标上的提醒数字
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
UIApplication *app=[UIApplication sharedApplication];
app.applicationIconBadgeNumber=1;
2,openUrl方法
UIApplication *app = [UIApplication sharedApplication];
打电话:[app openUrl:[NSUrl urlWithString:@“tel://100000”]];
发短信:[app openUrl:[NSUrl urlWithString:@“sms://111111”]];
发邮件:[app openUrl:[NSUrl urlWithString:@“mailto://111111@qq.com”]];
打开网页资源:[app openUrl:[NSUrl urlWithString:@“http://www.baidu.com”]];
打开地图:
NSString *addressText = @"beijing";
addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", addressText];
NSLog(@"urlText =============== %@", urlText);
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
3,判断程序运行状态
/*
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
*/
if([UIApplicationsharedApplication].applicationState ==UIApplicationStateInactive){
NSLog(@"程序在运行状态");
}
4,显示联网标记
[UIApplicationsharedApplication].networkActivityIndicatorVisible =YES;
5,阻止屏幕变暗进入休眠状态:(慎用,耗电)
[UIApplicationsharedApplication].idleTimerDisabled =YES;
一、程序主函数
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
程序启动后,先进入main函数,之后,执行UIApplicationMain这个函数,其中各个参数的意思如下:
1,argc:系统或者用户传入的参数个数
2,argue:系统或者用户传入的实际参数
3,指定应用程序类名:(app的象征),该类必须是UIApplication或其子类,如果是nil,则默认是UIApplication类
4:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
UIApplicationMain函数会根据第三个参数(类名)创建UIApplication对象,根据第四个参数(代理类名(必须遵守协议))创建一个delegate对象,并将该对象赋值给UIApplication对象中的delegate属性;接着会建立应用程序的Main Runloop(事件循环)【可以理解为里面是一个思循环,这个事件循环是一个队列(先进先出),先添加进去的先处理】,进行事件处理,(首先在程序加载完毕后,调用delegate对象的application:didFinishLaunchingWithOptions:方法),程序正常退出时,UIApplicationMain函数才返回
二、程序启动的完整过程
1,main函数
2,UIApplicationMain:
*:创建UIApplication对象。
*:创建UIApplication的delegate对象
3,delegate对象开始处理(监听)系统事件,(没有storyBoard情况)
*程序启动完毕的时候,就会调用代理的application:didFinishLaunchingWithOptions:方法,
*在application:didFinishLaunchingWithOptions:中创建UIWindow
*创建和设置UIWindow的rootController
*显示窗口
3,根据Info.plist获得最主要的storyBoard文件名,加载最主要的storyBoard(有storyBoard)
*创建UIWindow;
*创建和设置UIWindow是rootViewController
*显示窗口
三、程序启动原理图如下:
1,application:didFinishedLaunchingWithOptions:程序加载完毕
2,applicationDidBecomeActive:程序获取焦点
3,applicationDidEnterBackground:程序进入后台
在该方法中保存应用程序的数据,以及状态;要设置程序后台继续运行,在这个方法里
4,applicationWillResignActive:程序失去焦点
程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,例如来电话
5;applicationWillEnterForeFround:程序从后台回到前台
在该方法中恢复应用程序的数据,以及状态
6:applicationDidReceiveMemoryWaring:内存警告,可能要终止程序
一般在该方法内释放掉不需要的内存
7:applicationWillTerminate:程序即将退出