每个app有且只有一个UIApplication
对象,当程序启动的时候通过调用UIApplicationMain
方法得到的。可以通过sharedApplication
方法得到。
UIApplication
对象的主要任务是处理用户事件的处理路径,例如分发一个UIEvent
到另外一个对象去处理。UIApplication
对象持有众多的UIWindow
对象,因此可以组织app的展示。UIApplication
对象还能处理一些资源,例如通过openURL:
打开邮箱客户端或者设置界面等。
获得UIApplication
对象
[UIApplication sharedApplication]
获得UIApplicationDelegate
对象
[[UIApplication sharedApplication] delegate]
获得UIWindow
对象
// UIWindow数组
[[UIApplication sharedApplication] windows];
// UIWindow数组中最后调用makeKeyAndVisible方法的UIWindow对象
[[UIApplication sharedApplication] keyWindow];
控制和处理UIEvent
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// 分发一个event到另外一个对象去处理
[[UIApplication sharedApplication] sendAction:@selector(action: forEvent:) to:[CustomHandler sharedCustomHandler] from:self forEvent:event];
}
// 开始忽略Event
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
// ...中间调用动画等操作
// 结束忽略Event
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
// 晃动是否有撤销或者重做动作
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;
打开URL资源
// 打开设置界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
配置通知设置
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
//注册远程推送通知
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
// 注册
[[UIApplication sharedApplication] registerForRemoteNotifications];
// 注销
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
// 时间
localNotif.fireDate = date;
// 时区
localNotif.timeZone = [NSTimeZone localTimeZone];
// 间隔
localNotif.repeatInterval = NSCalendarUnitMinute;
// 声音
localNotif.soundName = UILocalNotificationDefaultSoundName;
// 通知内容
localNotif.alertBody = @"Local Test";
// 数字标示
localNotif.applicationIconBadgeNumber = 1;
// info
localNotif.userInfo = @{@"key":@"test"};
// 注册通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
// 立即通知
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotif];
// 取消所有通知
[[UIApplication sharedApplication] cancelAllLocalNotifications];
// 取消特定的通知
[[UIApplication sharedApplication] cancelLocalNotification:localNotif];
// 所有的通知
NSArray *arr = [[UIApplication sharedApplication] scheduledLocalNotifications];
后台运行相关
// app状态
[[UIApplication sharedApplication] applicationState];
// 设置后台运行时间
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:3600];
// app后台运行的时间
NSTimeInterval remainTime = [[UIApplication sharedApplication] backgroundTimeRemaining];
NSLog(@"remainTIme = %f",remainTime);
// 后台刷新的状态
int state = [[UIApplication sharedApplication] backgroundRefreshStatus];
NSLog(@"state = %d",state);
[[UIApplication sharedApplication] beginBackgroundTaskWithName:@"taskOne" expirationHandler:^{
}];
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
}];
[[UIApplication sharedApplication] endBackgroundTask:1];
远程的控制相关
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
系统的Idle Timer
// 不让手机休眠
[UIApplication sharedApplication].idleTimerDisabled = YES;
APP样式
// 隐藏状态条
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
// 设置状态条的样式
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
[[UIApplication sharedApplication] statusBarStyle];
// 状态条的Frame
[[UIApplication sharedApplication] statusBarFrame];
// 网络是否可见
[[UIApplication sharedApplication] isNetworkActivityIndicatorVisible];
// badge数字
[UIApplication sharedApplication].applicationIconBadgeNumber = 2;
// 屏幕的方向
[[UIApplication sharedApplication] userInterfaceLayoutDirection];
设置状态条的方向
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:YES];