iOS成长之路基础篇 – (7) 了解 UIApplication 和 AppDelegate

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注