本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
如果觉得本文内容过长,请前往本人 “简书”
UIApplication对象特点:
特点1:
|
举例:通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的。
- (void)viewDidLoad { |
打印结果:
2015-12-02 13:34:58.847 01 UIApplication[4563:852645] app1=0x7fe2b3e0eaa0 ---- app2 = 0x7fe2b3e0eaa0
|
特点2:
|
举例:
- (void)viewDidLoad { |
打印结果:
2015-12-02 13:39:00.270 01 UIApplication[4675:867735] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'
|
特点3:
|
(1)应用图标显示数字 (详见1.1 常用属性) |
(2)状态栏上的等待图标指示器 (详见1.1 常用属性) |
(3)利用UIApplication打开某个资源 (openURL:方法)
✓系统会自动根据协议识别使用某个app打开
//打开一个网页 : ✓使用openURL方法也可以打开其他应用,在不同应用之间互相调用对方。
美图秀秀, 点击分享到"新浪微博", 打开"新浪微博"选择账号, 跳转回"美图秀秀", 开始分享
喜马拉雅, 使用微博、QQ 账号 登录。都需要应用程序间跳转。
|
(4)通过UIApplication管理状态栏 (详见1.2 管理状态栏) |
1.1 — 常用属性
UIApplication的常用属性
//应用程序图标右上角的红色提醒数字(默认为0)
@property(nonatomic) NSInteger applicationIconBadgeNumber; 举例: - (void)viewDidLoad {
[super viewDidLoad]; //获取单例对象
UIApplication *app = [UIApplication sharedApplication]; // 创建用户通知设置 (iOS8 后要求设置通知的时候必须经过用户许可)
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
UIUserNotificationSettings *settings =
[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge
categories:nil];
//注册权限
[app registerUserNotificationSettings:settings];
} //设置数字
app.applicationIconBadgeNumber = ; }
//联网指示器的可见性 (默认为 no)
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
举例: - (void)viewDidLoad {
[super viewDidLoad]; //获取单例对象
UIApplication *app = [UIApplication sharedApplication]; //设置网络指示器
app.networkActivityIndicatorVisible = YES; }
1.2 — 管理状态栏
系统提供了2种管理状态栏的方式
1.通过UIViewController管理(iOS 7以后)(每一个UIViewController都可以拥有自己不同的状态栏)(推荐)
//状态栏的样式
-(UIStatusBarStyle)preferredStatusBarStyle; //状态栏的可见性
-(BOOL)prefersStatusBarHidden;
// 状态栏可见性(默认为 no) --- UIViewController管理 (推荐使用)
- (BOOL)prefersStatusBarHidden {
return NO;
} //状态栏的样式 --- UIViewController管理 (推荐使用)
- (UIStatusBarStyle)preferredStatusBarStyle { /* 状态栏样式 statusBarStyle
UIStatusBarStyleDefault 状态栏为黑色
UIStatusBarStyleLightContent 状态栏为白色
UIStatusBarStyleBlackTranslucent
UIStatusBarStyleBlackOpaque
*/ return UIStatusBarStyleDefault;
}
2.通过UIApplication管理(iOS 6之前)
(1)在ios 7 以后如果要通过UIApplication管理,则首先要在Info.plist文件中增加一个配置项
|
//状态栏的样式 --- UIApplication管理 |
使用场合
UIApplication:状态栏的样式只设置一次,使用动画效果 |
UIViewController:状态栏是否隐藏,样式不一样 |
1.3 — UIApplicationDelegate
引入
|
delegate可处理的事件如:
|
简介:
|
在main函数中进行的设置:
文件位置:Supporting Files —> main.m |
#import <UIKit/UIKit.h> |
注意:
AppDelegate的主要作用就是处理(监听)应用程序本身的各种事件 |
要想成为UIApplication的代理对象, 必须遵守:UIApplicationDelegate协议 |
1.3.1 — 代理方法
AppDelegate文件默认已经遵守了UIApplicationDelegate协议,已经是UIApplicationDelegate的代理
// AppDelegate.h #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end |
处理(监听)应用程序本身的各种事件:
// AppDelegate.m #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate // app启动完成 调用该方法 启动之后,将不再调用此方法!
// 如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"%s", __func__);
return YES;
} // app即将退出活动状态的时候调用 (将要失去焦点:不能和用户交互)( 此方法在来电或来短信的时候被调用)
// 游戏应该再此方法中暂停游戏进程!此方法在游戏开发中尤为重要!
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%s", __func__);
} // app已经进入后台 调用该方法 (在此方法中保存应用程序的数据和状态)
// 应用程序退出到后台,释放共享资源,保存用户数据,停止时钟,保存足够的应用程序状态信息...
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"%s", __func__);
} // app即将进入前台的时候 调用该方法 (在此方法中还原应用程序的数据和状态)
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"%s", __func__);
} // app已经进入活动状态, 重新启动原来暂停的状态 (重新获取焦点:可以和用户交互)
- (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"%s", __func__);
} // app接收到内存警告 调用该方法
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
NSLog(@"%s", __func__);
} // app将要被杀死 调用该方法
// 注意:1.用户主动关闭 2.系统因为内存不够关闭了程序
- (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"%s", __func__);
}
@end