UIApplication 和 Appdelegate-----iOS
正文
一 UIApplication
1.一个UIApplication代表是一个应用程序,而且是单例的。一个程序也只能有一个UIApplication对象
2.获取UIApplication对象: [UIApplication sharedApplication];
3.当一个iOS程序启动后,首先创建的第一个对象就是UIApplication对象然后是UIWindow 然后是控件
4.UIApplication可以做一些应用级别的操作:
1) QQ有消息的时候右上角的消息条数。
// 获取UIApplication对象。
UIApplication *app = [UIApplication sharedApplication]; // 设置右上角, 有10条消息
app.applicationIconBadgeNumber = ; // 取消显示消息
app.applicationIconBadgeNumber = ;
/** 参考代码:
// 当点击按钮时, 设置右上角消息
- (IBAction)click:(id)sender { // 获取UIApplication对象
UIApplication *app = [UIApplication sharedApplication]; // iOS 8 系统要求设置通知的时候必须经过用户许可。
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; [app registerUserNotificationSettings:settings]; app.applicationIconBadgeNumber = 10; // 有10条消息 // app.applicationIconBadgeNumber = app.applicationIconBadgeNumber > 0 ? 0 : 10; // 有10条消息
} */
2) 联网操作时,状态栏上的等待图标指示器。waiting图标。
UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
3) 利用UIApplication打开某个资源:
//** 系统会自动根据协议识别使用某个app打开。
UIApplication *app = [UIApplication sharedApplication];
// ** 打开一个网页:
[app openURL:[NSURL URLWithString:@"http://ios.icast.cn"]]; // ** 打电话
[app openURL:[NSURL URLWithString:@"tel://10086"]]; // ** 发短信
[app openURL:[NSURL URLWithString:@"sms://10086"]]; // ** 发邮件
[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]]; // ** 使用openURL方法也可以打开其他应用,在不同应用之间互相调用对方。
// ** 美图秀秀, 点击分享到"新浪微博", 打开"新浪微博"选择账号, 跳转回"美图秀秀", 开始分享
4) 通过UIApplication管理状态栏:
自从iOS7开始可以通过两种方式来控制状态栏
1> 控制器
* 通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)
* 需要在控制器中实现如下方法:
/** 参考代码:
// 是否隐藏"状态栏"
- (BOOL)prefersStatusBarHidden
{
return NO;
}
// 状态栏的样式
- (UIStatusBarStyle)preferredStatusBarStyle
{
// 白色
return UIStatusBarStyleLightContent;
}
*/
2> UIApplication
* 通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
** iOS7开始状态栏默认交给了控制器来管理,如果希望通过UIApplication来管理,步骤如下:
1> 在Info.plist文件中增加一个配置项
* View controller-based status bar appearance = NO,
2>然后编写如下代码:
>然后编写如下代码:
/** 参考代码:
- (IBAction)click:(id)sender { UIApplication *app = [UIApplication sharedApplication]; // 设置状态栏是否隐藏
//app.statusBarHidden = YES;
// 动画的方式
//[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; // 设置状态栏显示为白色
// app.statusBarStyle = UIStatusBarStyleLightContent;
// 动画的方式
//[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
} */
二 AppDelegate中的若干方法介绍:
* - (BOOL)application:didFinishLaunchingWithOptions:
app加载完毕的时候调用
* - (void)applicationWillResignActive:
app失去焦点的时候调用(失去焦点UI控件就不能正常使用了, 然后app就可以进入后台了)
* - (void)applicationDidEnterBackground:
app进入后台的时候调用(app消失不见)
* - (void)applicationWillEnterForeground:
app进入前台的时候调用(app显示出来)
* - (void)applicationWillTerminate:
app终结, app关闭的时候调用(但一般情况下不会调用).
注意: 当一个应用进入后台(休眠)状态下时, 然后再关闭该应用, 并不会调用applicationWillTerminate:
方法。原因: 当应用进入"休眠"状态下的时候是无法接收任何事件的(比如关闭)。但是有些应用在进入后台的时候, 并不休眠(比如"音乐播放器"、"QQ"等。要实现这种效果需要在"info.plist"中增加一个配置: 配置该应用的类型。 )参考:http://www.cnblogs.com/tracy-e/p/3151457.html
** 在上面的四个代理方法中输出一句话, 验证执行顺序。
三 UIApplicationMain
/**
方法名:
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
参数介绍:
argc:使用main函数的argc即可
argv:使用main函数的argv即可
principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类),如果为nil,则用UIApplication类作为默认值
delegateClassName:指定应用程序的代理类,UIApplicationDelegate协议中定义的方法,在该类中实现
UIApplicationMain函数会:
1> 根据principalClassName创建UIApplication对象
2> 根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
程序正常退出时UIApplicationMain函数才返回
默认调用方式:
UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
等价于
UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
** 代理参数必须传递, 如果传nil, 则显示"黑屏"。
*/
iOS程序启动过程。
1> 打开程序。
2> 调用main函数。
3> 在main函数中调用: UIApplicationMain()函数。
* 在UIApplicationMain()函数中:
1. 创建UIApplication对象
2. 创建AppDelegate代理对象
3. 将AppDelegate代理对象设置给UIApplication对象。
4. 程序启动完毕: 触发application:didFinishLaunchingWithOptions事件。
5. 在UIApplicationMain()函数开启一个"死循环(事件循环)", 所以程序不会退出, 我们可以任意使用。在这个"死循环(事件循环)"中程序不断监听用户的各种事件, 依次处理(依靠"事件队列"实现)。
4> 程序退出。
UIApplication 和 Appdelegate-----iOS的更多相关文章
- IOS UIApplication和AppDelegate 关系
UIApplication.AppDelegate.委托等的关系? 什么是委托?为什么要有委托?委托在Iphone中的实现机制是怎样的? 一般来说,我们创建了一个Iphone项目,默认会有这个mai ...
- iOS之UIApplication详解
UIApplication对象特点: 特点1: UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序,而且是单例的.(用来封装整个应用程序的一个对象, ...
- UIApplication sharedApplication详细解释-IOS
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
- iOS - UIApplication
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIApplication : UIResponder @available(iOS 2.0, *) public ...
- (转)UIApplication sharedApplication详细解释-IOS
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
- iOS开发-UIApplication和App启动状态
UIApplication简单从字面上了解就是应用程序,开发的时候有的时候会根据需要调用其中的方法,看起来不起眼,实际在iOS开发UIApplication提供了iOS程序运行期间的控制和协作工作.每 ...
- 深入理解UIApplication和ios程序启动过程
在深入理解UIApplication前我们先了解ios程序的启动过程: UIApplication类在ios里面为app的管理和协调提供一个集中的点,每一个app有一个UIApplication的实例 ...
- ios开发之AppDelegate
创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件. AppDelegate为何物? AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...
- iOS之UIApplicatio、AppDelegate
UIApplication,代表的是整个应用做的事,因此每个程序只能有一个,系统使用的是单例模式,就是[UIApplication sharedApplication]来得到一个实例. 这个单例实例是 ...
- [ios基础]IOS应用程序的生命周期问题
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
随机推荐
- linux 驱动入门6
看/sys目录经常看到bus device driver class. 这也是网上大量说的驱动驱动模型.这些的关系得熟悉得明白吧.是的.今天我先不整他们的关系.先逐个击破,然后再统一来理清楚他们之间的 ...
- HDU 5651 xiaoxin juju needs help
组合数杨辉三角打表,这样避免了除法求逆元. #include<cstdio> #include<cstring> #include<cmath> #include& ...
- 以太网数据包、IP包、TCP/UDP 包的结构(转)
源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Head ...
- 单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等(转)
源:单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等 //modebus_rtu.c /***************************************** ...
- 浅谈IOS8之size class 分类: ios技术 2015-02-05 19:06 62人阅读 评论(0) 收藏
文章目录 1. 简介 2. 实验 3. 实战 3.1. 修改 Constraints 3.2. 安装和卸载 Constraints 3.3. 安装和卸载 View 3.4. 其他 4. 后话 以前和安 ...
- IOS开发-OC学习-Info.plist文件解析
Info.plist文件是新建ios项目完成后自动生成的一个配置文件,在Xcode中如下图: 通过解析可以获得配置的具体细节,解析过程如下: // 定义一个nsstring用来获取Info.plist ...
- js排序算法汇总
JS家的排序算法 十大经典算法排序总结对比 一张图概括: 主流排序算法概览 名词解释: n: 数据规模k:“桶”的个数In-place: 占用常数内存,不占用额外内存Out-place: 占用额外 ...
- Android 控件布局常用属性
<!--单个控件经常用到android:id —— 为控件指定相应的IDandroid:text —— 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串a ...
- 关于String的相关常见方法
package Stirng类; /** * String 常见的相关方法摘要 * @author Administrator * */ public class DemoStringMethod { ...
- css3实战版的点击列表项产生水波纹动画
1.html+js: <!DOCTYPE html><html><head lang="en"> <meta charset=&qu ...