iOS成长之路基础篇 – (7) 了解 UIApplication 和 AppDelegate
每一个 iOS 应用都具有的两个类,他们是一个 iOS App 的灵魂支撑。今天总结一下 UIApplication 和 AppDelegate。
UIApplication
UIApplication 对象是应用程序的象征。
每一个应用都有自己的UIApplication对象,而且是单例的。
可以通过[UIApplication sharedApplication]
可以获得这个单例对象。
一个iOS程序启动后创建的第一个对象是UIApplication对象,使用UIApplication对象,能进行一些系统级别的操作。
// 单例模式实现(后面详细学习,自己的写法/模仿苹果API)
// 1、外部不能调用alloc,调用会抛异常。
// 2、提供一个方法共外部调用获取实例
// 3、内部创建一次单例,类加载的时候调用(load函数)
常用属性:
- 设置应用程序图标右上角的红色提醒数字(@property(nonatomic) NSInteger applicationIconBadgeNumber)
- 设置联网指示器的可见性(isNetworkActivityIndicatorVisible)
- iOS 中的状态栏设置(iOS9 中跟状态栏有关的已经过期,状态栏交给控制器UIViewController管理了)
- 应用界别的跳转 (openURL)
// UIApplication
// 设置图标数字
UIApplication *app = [UIApplication sharedApplication];
// 创建用户通知对象(iOS8以后需要设置)
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
[app registerUserNotificationSettings:settings];
// 设置提醒数字
[app setApplicationIconBadgeNumber:100];
// 设置联网状态
[app setNetworkActivityIndicatorVisible:YES];
// 设置状态栏(iOS9 设置状态栏已经失效)
[app setStatusBarHidden:YES];
// 打电话,打开网页等应用跳转
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
if ([app canOpenURL:url]) {
[app openURL:url];
} // 根据协议头可以处理跳转
UIApplication 和delegate
AppDelegate 将代替 UIApplication 处理一些系统事件,遵守UIApplicationDelegate协议。
事件包括:
- 应用程序的生命周期事件(启动,关闭,进入后台)
- 应用级跳转(openURL的接收)
- 内存警告
// 应用程序的生命周期方法
@implementation AppDelegate
// 程序启动完成时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
// 程序即将失去焦点的时候
- (void)applicationWillResignActive:(UIApplication *)application { }
// 程序完全进入后台的时候
- (void)applicationDidEnterBackground:(UIApplication *)application {
// 保存数据操作
}
// 程序集将进入前台的时候
- (void)applicationWillEnterForeground:(UIApplication *)application { }
// 程序完全获得焦点的时候
- (void)applicationDidBecomeActive:(UIApplication *)application { }
// 程序即将终止的时候
- (void)applicationWillTerminate:(UIApplication *)application { }
@end