标签:
|
|
举例:通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的。
1 - (void)viewDidLoad {
2 [super viewDidLoad];
3
4 //获取app对象 证明了一个应用程序中只有一个UIApplication对象
5 UIApplication *app1 = [UIApplication sharedApplication];
6
7 UIApplication *app2 = [UIApplication sharedApplication];
8 NSLog(@"app1=%p ---- app2 = %p", app1, app2);
9
10 }
|
|
打印结果:
2015-12-02 13:34:58.847 01 UIApplication[4563:852645] app1=0x7fe2b3e0eaa0 ---- app2 = 0x7fe2b3e0eaa0
|
|
|
举例:
1 - (void)viewDidLoad {
2 [super viewDidLoad];
3
4 //通过alloc+ init 创建一个UIApplication对象,会报异常
5 UIApplication *app = [[UIApplication alloc] init];
6
7 NSLog(@"%p", app);
8 }
|
|
打印结果:
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.‘
|
|
| (1)应用图标显示数字 (详见1.1 常用属性) |
| (2)状态栏上的等待图标指示器 (详见1.1 常用属性) |
|
(3)利用UIApplication打开某个资源 (openURL:方法)
?系统会自动根据协议识别使用某个app打开
1 //打开一个网页 : 2 [app openURL:[NSURL URLWithString:@"http://ios.icast.cn"]]; 3 4 //打电话 5 [app openURL:[NSURL URLWithString:@"tel://10086"]]; 6 7 //发短信 8 [app openURL:[NSURL URLWithString:@"sms://10086"]]; 9 10 //发邮件 11 [app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]]; 12 ?使用openURL方法也可以打开其他应用,在不同应用之间互相调用对方。
美图秀秀, 点击分享到"新浪微博", 打开"新浪微博"选择账号, 跳转回"美图秀秀", 开始分享
喜马拉雅, 使用微博、QQ 账号 登录。都需要应用程序间跳转。
|
| (4)通过UIApplication管理状态栏 (详见1.2 管理状态栏) |
1 //应用程序图标右上角的红色提醒数字(默认为0)
2 @property(nonatomic) NSInteger applicationIconBadgeNumber;
3
4 举例:
5
6 - (void)viewDidLoad {
7 [super viewDidLoad];
8
9 //获取单例对象
10 UIApplication *app = [UIApplication sharedApplication];
11
12 // 创建用户通知设置 (iOS8 后要求设置通知的时候必须经过用户许可)
13 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
14 UIUserNotificationSettings *settings =
15 [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge
16 categories:nil];
17 //注册权限
18 [app registerUserNotificationSettings:settings];
19 }
20
21 //设置数字
22 app.applicationIconBadgeNumber = 10;
23
24 }
1 //联网指示器的可见性 (默认为 no) 2 @property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
3 举例: 4 5 - (void)viewDidLoad { 6 [super viewDidLoad]; 7 8 //获取单例对象 9 UIApplication *app = [UIApplication sharedApplication]; 10 11 //设置网络指示器 12 app.networkActivityIndicatorVisible = YES; 13 14 }
1 //状态栏的样式
2 -(UIStatusBarStyle)preferredStatusBarStyle;
3
4 //状态栏的可见性
5 -(BOOL)prefersStatusBarHidden;
6 // 状态栏可见性(默认为 no) --- UIViewController管理 (推荐使用)
7 - (BOOL)prefersStatusBarHidden {
8 return NO;
9 }
10
11 //状态栏的样式 --- UIViewController管理 (推荐使用)
12 - (UIStatusBarStyle)preferredStatusBarStyle {
13
14 /* 状态栏样式 statusBarStyle
15 UIStatusBarStyleDefault 状态栏为黑色
16 UIStatusBarStyleLightContent 状态栏为白色
17 UIStatusBarStyleBlackTranslucent
18 UIStatusBarStyleBlackOpaque
19 */
20
21 return UIStatusBarStyleDefault;
22 }
|
(1)在ios 7 以后如果要通过UIApplication管理,则首先要在Info.plist文件中增加一个配置项
|
1 //状态栏的样式 --- UIApplication管理
2 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
3
4 //获取单例对象
5 UIApplication *app = [UIApplication sharedApplication];
6
7 //采用动画的效果设置状态栏的样式-由黑变白(过期)
8 [app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
9
10 //隐藏状态栏
11 app.statusBarHidden = YES;
12
13 //采用动画的方式隐藏状态栏 (过期 ios 3.2弃用)
14 [app setStatusBarHidden:YES animated:YES];
15
16 /* withAnimation:方法 (过期)
17 UIStatusBarAnimationNone 无特效
18 UIStatusBarAnimationFade 淡出效果
19 UIStatusBarAnimationSlide 向上退出隐藏
20 */
21 [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
22 }
|
| UIApplication:状态栏的样式只设置一次,使用动画效果 |
| UIViewController:状态栏是否隐藏,样式不一样 |
|
|
delegate可处理的事件如:
|
|
| 文件位置:Supporting Files —> main.m |
1 #import <UIKit/UIKit.h>
2 #import "AppDelegate.h"
3
4 int main(int argc, char *argv[]) {
5 @autoreleasepool {
6
7 //设置启动UIApplication对象, 和对应的代理对象AppDelegate
8 return UIApplicationMain(argc, argv, nil,NSStringFromClass([AppDelegate class]));
9 }
10 }
|
| AppDelegate的主要作用就是处理(监听)应用程序本身的各种事件 |
| 要想成为UIApplication的代理对象, 必须遵守:UIApplicationDelegate协议 |

1 // AppDelegate.h 2 3 #import <UIKit/UIKit.h> 4 5 @interface AppDelegate : UIResponder <UIApplicationDelegate> 6 7 @property (strong, nonatomic) UIWindow *window; 8 9 @end |
1 // AppDelegate.m
2
3 #import "AppDelegate.h"
4
5 @interface AppDelegate ()
6
7 @end
8
9 @implementation AppDelegate
10
11 // app启动完成 调用该方法 启动之后,将不再调用此方法!
12 // 如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
13 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
14 NSLog(@"%s", __func__);
15 return YES;
16 }
17
18 // app即将退出活动状态的时候调用 (将要失去焦点:不能和用户交互)( 此方法在来电或来短信的时候被调用)
19 // 游戏应该再此方法中暂停游戏进程!此方法在游戏开发中尤为重要!
20 - (void)applicationWillResignActive:(UIApplication *)application {
21 NSLog(@"%s", __func__);
22 }
23
24 // app已经进入后台 调用该方法 (在此方法中保存应用程序的数据和状态)
25 // 应用程序退出到后台,释放共享资源,保存用户数据,停止时钟,保存足够的应用程序状态信息...
26 - (void)applicationDidEnterBackground:(UIApplication *)application {
27 NSLog(@"%s", __func__);
28 }
29
30 // app即将进入前台的时候 调用该方法 (在此方法中还原应用程序的数据和状态)
31 - (void)applicationWillEnterForeground:(UIApplication *)application {
32 NSLog(@"%s", __func__);
33 }
34
35 // app已经进入活动状态, 重新启动原来暂停的状态 (重新获取焦点:可以和用户交互)
36 - (void)applicationDidBecomeActive:(UIApplication *)application {
37
38 NSLog(@"%s", __func__);
39 }
40
41 // app接收到内存警告 调用该方法
42 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
43 NSLog(@"%s", __func__);
44 }
45
46 // app将要被杀死 调用该方法
47 // 注意:1.用户主动关闭 2.系统因为内存不够关闭了程序
48 - (void)applicationWillTerminate:(UIApplication *)application {
49
50 NSLog(@"%s", __func__);
51 }
52 @end
标签:
原文地址:http://www.cnblogs.com/Mr-ios/p/5169631.html