做iOS开发的同学对UIApplication一定不陌生,当我们想要弹框,蒙层等功能时,都会使用类似如下的操作:
UIWindow *delegateWindow = [UIApplication sharedApplication].delegate.window;
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
这里面delegateWindow和keyWindow的区别你是否了解?还有UIApplication是不是也深入了解过?
UIApplication,代表的是整个应用做的事,因此每个程序只能有一个,系统使用的是单例模式,就是上面的[UIApplication sharedApplication]来得到一个实例。这个单例实例是在系统启动时由main函数里面的UIApplicationMain方法生成,就是每个程序里都有的AppDelegate,它实现了UIApplicationDelegate的Protocol,也就是AppDelegate的一个实例。每次通过[UIApplication sharedApplication]调用的就是它。
UIApplication在程序里的角色:它保存一个UIWindow对象序列,用来快速恢复views。
UIApplication的核心作用是提供了iOS程序运行期间的控制和协作工作。
1.简单介绍
(1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序。
(2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示。
(3)通过[UIApplicationsharedApplication]可以获得这个单例对象
(4) 一个iOS程序启动后创建的第一个对象就是UIApplication对象,且只有一个(通过代码获取两个UIApplication对象,打印地址可以看出地址是相同的)。
(5)利用UIApplication对象,能进行一些应用级别的操作
2.应用级别的操作示例:
1)设置应用程序图标右上角的红色提醒数字(如QQ消息的时候,图标上面会显示1,2,3条新信息等。)
@property(nonatomic) NSInteger applicationIconBadgeNumber;
代码实现和效果:
UIApplication 一些其他属性
//通过sharedApplication获取该程序的UIApplication对象
UIApplication *app=[UIApplication sharedApplication];
app.applicationIconBadgeNumber=123;
//设置指示器的联网动画
app.networkActivityIndicatorVisible=YES;
//设置状态栏的样式
//app.statusBarStyle=UIStatusBarStyleDefault;//默认(黑色)
//设置为白色+动画效果
[app setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
//设置状态栏是否隐藏
app.statusBarHidden=YES;
//设置状态栏是否隐藏+动画效果
[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];