1. 什么是UIApplication

  • UIApplication 对象是应用程序的象征,不能手动创建,不能 alloc init,一个应用程序只允许 一个 。

  • 每个应用都有自己的 UIApplication 对象,而且是单例。

  通过 [UIApplication shareApplication] 可以获取这个单例对象。  

  弄成单例的原因:

   UIApplication 对象是用来设置应用全局信息的,一个应用程序如果有很多 UIApplication 对象,都不知道听谁的。

  • 一个iOS程序启动后创建第一个对象就是 UIApplication 对象。

  • 利用 UIApplication 对象,能进行一些应用级别的操作。

2. UIApplication的作用(常用的属性和方法)

 UIApplication 一般用来做一些应用级别的操作(app提醒框,控制联网的状态,打电话,打开网页)。

 1> 设置appIcon提醒数字

  图标需要手动清除,应用程序关闭,不会自动清除。

  iOS头文件中的属性声明:

@property(nonatomic) NSInteger applicationIconBadgeNumber __TVOS_PROHIBITED;  // set to 0 to hide. default is 0. In iOS 8.0 and later, your application must register for user notifications using -[UIApplication registerUserNotificationSettings:] before being able to set the icon badge.

  通过注释我们可以得知:iOS8之后必须注册用户通知,注册后才能显示提醒数字

  注册用户通知方法声明:

// Registering UIUserNotificationSettings more than once results in previous settings being overwritten.
- (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED;

  iOS8.0推出注册用户通知的目的是为了提高用户的体验,对于有强迫症的用户可以通过这个通知将提醒数字关闭。

  实例代码:

// 通过单例方法获取 UIApplication 对象
UIApplication *app = [UIApplication sharedApplication]; // 设置appIcon提醒数字,iOS8之后必须注册用户通知
app.applicationIconBadgeNumber = ;
// 创建用户通知
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
// 注册用户的通知
[app registerUserNotificationSettings:settings];

  用户通知如图:

  点击 " 好 " 后就可以看到类似于QQ消息数量的提醒,如图:

  点击 " 不允许 "后就没有,如图

 2> 设置联网状态

  显示联网状态,告诉用户此应用正在联网。  

  iOS头文件中的属性声明:

@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible __TVOS_PROHIBITED; // showing network spinning gear in status bar. default is NO

  实例代码:

    // 设置联网状态
app.networkActivityIndicatorVisible = YES;

  效果图:

 3>  打开网页

  iOS头文件中的方法声明:

- (BOOL)openURL:(NSURL*)url NS_EXTENSION_UNAVAILABLE_IOS("");

 实例代码:

#pragma mark - 打开网页
- (IBAction)btnClick:(id)sender { // URL:资源路径
// URL:协议头://域名+路径 http,https,file,tel
// 协议头:
// 打开网页 @"http://www.baidu.com" NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; [[UIApplication sharedApplication] openURL:url];
}

  UIApplication 打开资源的好处:不用判断用什么软件打开,系统会自动根据协议头判断。

3. UIApplication 的代理方法

 我们可以进入到 UIApplicationDelegate 的头文件看到它的代理方法有很多,常用的也就是你创建一个 Single View Application 工程中在 AppDelegate 中生成的,下面代码就是,这些代理具体如何使用详见代码注释。

 实例代码:

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

// 学习代理方法,只需要知道这个方法什么时候调用,这个方法可以用来干嘛

// 程序启动完成后调用(常用)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
return YES;
} // 当app失去焦点的时候调用
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
} // app进入后台的时候调用(常用)
// app忽然被打断的时候,在这里保存一些需要用到的数据
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
} // app即将进入前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
} // 当app获取到焦点的时候调用,意味着app可以和用户交互
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
} // app被关闭的时候调用
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
} // app接受内存警告的时候被调用(常用)
// 清空图片缓存
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@"%s__%d", __FUNCTION__, __LINE__);
} @end

【原】iOS学习之UIApplication及其代理的更多相关文章

  1. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

  2. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

  3. 【原】iOS学习之应用程序的启动原理

    最近看视频了解了一下应用程序的启动原理,这里就做一个博客和大家分享一下,相互讨论,如果有什么补充或不同的意见可以提出来! 1.程序入口 众所周知,一个应用程序的入口一般是一个 main 函数,iOS也 ...

  4. 【原】iOS学习47之第三方-FMDB

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...

  5. 【原】iOS学习之第三方-AFNetworking1.3.0

    将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 AFNetworking 第三方集成到工程中,具体请看上篇博客iOS学习46之第三方CocoaPods的安装和使用(通用方 ...

  6. 【原】iOS学习之SQLite和CoreData数据库的比较

    1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...

  7. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  8. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  9. IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

    IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...

随机推荐

  1. Linux下php安装Redis扩展

    说明: 操作系统:CentOS php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php7/etc/php.ini Nginx安装目录:/usr/loca ...

  2. linux 命令行 光标移动技巧

    linux 命令行 光标移动技巧 看一个真正的专家操作命令行绝对是一种很好的体验-光标在单词之间来回穿梭,命令行不同的滚动.在这里强烈建立适应GUI节目的开发者尝试一下在提示符下面工作.但是事情也不是 ...

  3. 三、Shell变量类型和运算符

    一.Shell变量的应用 1.Shell变量的种类     ·用户自定义变量:由用户自己定义.修改和使用     ·预定义变量:Bash预定义的特殊变量,不能直接修改     ·位置变量:通过命令行给 ...

  4. html传参数

    var request = { QueryString: function (paramName) { var url = window.location.search; paramValue = & ...

  5. 加载plist文件数据的方法

    这个pilist文件最外面的是一个数组,数组中每一个item是一个字典,我们的目的就是为了取到每一个item字典中的内容数据 下面看代码举例 //加载数组 - (void)handleData { / ...

  6. 【06-23】js动画学习笔记01

    <html> <head> <style> * { margin:0; padding:0; } #div1{ width:200px; height:200px; ...

  7. golang笔记——array

    1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" ...

  8. socket编程热身程序

    /*server.c*/ #include <stdio.h> #include <arpa/inet.h> #include <sys/types.h> /* S ...

  9. PHP用curl伪造IP和来源

    以前没有这么搞过. 今天群里一个朋友在问这个问题. 查了下,CURL确实很强悍的可以伪造IP和来源. 1.php 请求 2.php . 1.php代码: $ch = curl_init(); curl ...

  10. 在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决?

    今天在做 COS脚本解释器的时候,遇到了这个问题 先了解一下 LPCTCHAR 这个东东 LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么 ...