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. js分页小结

     今天解决了JS分页的问题1 页码 给每页的内容套一个相同的类名 通过选择器加上.length或者.size() 来获得总页数2当前页的页码可以使用each(function(index,DOMsss ...

  2. SDL 截图、录像、录像播放

    截图 使用sdl很简单,视频显示窗口大小,不是视频分辨率大小 int i = Sdl.SDL_SaveBMP(surfacePtr, path); if(i != 0) { MessageBox.Sh ...

  3. 8-9 MyBatis基础课

    慕课网,'通过自动回复小机器人学习Mybatis',看了一半,没网了... Jsp+servlet+jdbc

  4. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  5. 关于 Word Splitting 和 IFS 的三个细节

    在 Bash manual 里叫 Word Splitting,在 Posix 规范里叫 Field Splitting,这两者指的是同一个东西,我把它翻译成“分词”,下面我就说三点很多人都忽略掉(或 ...

  6. wind的R接口、况客RSDK学习,双冒号以及quantmod主题

    本文主要参考:来自segmentfault上的FinanceR的专栏 https://segmentfault.com/a/1190000004580610 并自己对生疏不解之处做了补充和注释. 当然 ...

  7. avl树的操作证明

    以下用大O表示节点,ABC表示三个集合. 仅分析左子树的情况,因为对称,右子树的情况一样. 插入节点前 O /     \ O        A   /    \ B       C 插入节点后: O ...

  8. 教你摸清 Linux PC 的性能底细?

    导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好.在许多情况下,“基准测试”实际上等同于“压力测试”.通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ...

  9. Matlab学习笔记(一)—— 三维图形绘制

    这学期公选课选的是MATLAB,所以准备把这学期所学习的整理到博客上,作为记录,哇咔咔~ 一.三维函数图: x=cos(t), y=sin(t), z=t %≤t ≤*pi t=:*pi; %t的取值 ...

  10. SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configur

    参见:http://msdn.microsoft.com/zh-cn/library/ms191188(SQL.105).aspx Ole Automation Procedures 选项 [本主题为 ...