【原】iOS学习之UIApplication及其代理
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及其代理的更多相关文章
- 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536
原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45) 阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...
- 【原】iOS学习之事件处理的原理
在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...
- 【原】iOS学习之应用程序的启动原理
最近看视频了解了一下应用程序的启动原理,这里就做一个博客和大家分享一下,相互讨论,如果有什么补充或不同的意见可以提出来! 1.程序入口 众所周知,一个应用程序的入口一般是一个 main 函数,iOS也 ...
- 【原】iOS学习47之第三方-FMDB
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...
- 【原】iOS学习之第三方-AFNetworking1.3.0
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 AFNetworking 第三方集成到工程中,具体请看上篇博客iOS学习46之第三方CocoaPods的安装和使用(通用方 ...
- 【原】iOS学习之SQLite和CoreData数据库的比较
1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)
IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSX ...
随机推荐
- 安卓log4k问题解决
1.直接上代码 //log4k问题 public static void log(String tag, String str) { int index = 0; // 当前位置 int max = ...
- log4net各种Filter使用【转】
log4net各种Filter使用[转] log4net里面的filter类常用的为: 1.DenyAllFilter 拒绝所用的日志输出 <filte ...
- 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector)
一,开篇分析 Hi,大家好!大熊君又和大家见面了,还记得前两篇文章吗.主要讲述了以“jQuery的方式如何开发插件”,以及过程化设计与面向对象思想设计相结合的方式是 如何设计一个插件的,两种方式各有利 ...
- linux下cp覆盖原so文件时引起的段错误原因确定
原创作品,转载请注明出处http://www.cnblogs.com/leo0000/p/5694416.html 最近因为一个很有意思的段错误学习了一些新的东西. 当时现象是这样的,程序正在运行,系 ...
- java表格的使用 单元格绘制二
JTable单元格是由单元格绘制器绘制出来的,这是一些执行TableCellRenderer接口的类.TableCellRenderer接口定义了唯一的getTableCellRendererComp ...
- linux磁盘分区模式
linux磁盘分区模式 模式一:MBR 1)主分区不超过四个 2)单个分区容量最大2TB 模式二:GPT 1)主分区个数"几乎"没有限制(原因:在GPT的分区表中最多可以支持128 ...
- Alpha版本十天冲刺——Day 10
站立式会议 最后一天,很高兴我们做出了跟预期差不多的版本,实现了基本功能,虽然还有一些bug,但是下一阶段我们会继续加油! 会议总结 队员 今天完成 遇到的问题 感想 鲍亮 功能细节更改 我的手机运行 ...
- MySQL 视图
一.视图是一种虚拟存在的表,并不在数据库中实际存在.数据来自于视频中查询使用的表,在使用视图时动态生成的. 二.视图的优势: (A) 简单:已经是过滤好的复合条件的结果集 (B) 安全:表的权限不能限 ...
- serialize存入数组
原代码 def get_type type_list = "" if categories.include?"movie" type_list += " ...
- 上个项目的一些反思 I
最近一直在反思之前的项目,发现了很多问题.比如数据安全... 虽然项目需求是只展示最新的数据,所以几乎没用什么本地存储.除了通讯录和用户的Token. 用户通讯录另表,今天反思下用户的Token的存储 ...