UIApplication

什么是UIApplication

      • UIApplication对象是应用程序的象征
      • 每一个应用都有自己的UIApplication对象,而且是单例的
      • 通过[UIApplication sharedApplication]可以获得这个单例对象
      • 一个iOS程序启动后创建的第一个对象就是UIApplication对象
      • 利用UIApplication对象,能进行一些应用级别的操作
      • UIApplication的常用属性
      • 设置应用程序图标右上角的红色提醒数字

@property(nonatomic) NSInteger applicationIconBadgeNumber;

      • 设置联网指示器的可见性

@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

利用UIApplication来管理状态栏

      • 如果想利用UIApplication来管理状态栏,首先得修改Info.plist的设置
      • openURL:
      • UIApplication有个功能十分强大的openURL:方法

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

      • openURL:方法的部分功能有
      • 打电话

UIApplication *app = [UIApplication sharedApplication];

[app openURL:[NSURL URLWithString:@"tel://10086"]];

      • 发短信

[app openURL:[NSURL URLWithString:@"sms://10086"]];

      • 发邮件

[app openURL:[NSURL URLWithString:@"mailto://12345@qq.com"]];

      • 打开一个网页资源

[app openURL:[NSURL URLWithString:@"http://ios.itcast.cn"]];

      • 打开其他app程序
      • UIApplicationdelegate
      • 所有的移动操作系统都有个致命的缺点:app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止
      • 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件
      • delegate可处理的事件包括:
      • 应用程序的生命周期事件(如程序启动和关闭)
      • 系统事件(如来电)
      • 内存警告
      • 每次新建完项目,都有个带有“AppDelegate”字眼的类,它就是UIApplication的代理
      • AppDelegate默认已经遵守了UIApplicationDelegate协议,已经是UIApplication的代理
      • 1>开启事件循环后显示Default.png-->加载完毕Default.png显示,执行didFinishlaunchingWithOption:这个方法,当程序进入后台,再次通过图标进入APP是这个方法,不会调用,当在后台将程序杀死,再次运行程序这个方法才会执行,只加载一次,杀死后再次重新启动才会调用.

      • 2>程序正在运行时被打断(来电话)程序会自动进入后台,调用EnterBackground方法,此时可以在这个方法中保存程序信息.
      • 3>delegate是用来就爱你听系统事件的:系统事件就是进入前台,后台,受到内存警告...delegate监听到就执行相应的方法.
      • 4>事件循环开启后,事件循环会不停检测事件队列(fifo)中的事件,包括系统事件和其他事件,所有事件都会加入到事件队列中,然后拿出来一个一个处理.每当监听到一个事件会调用相应的方法.
      • 不断遍历队列中的事件来处理.
      • UIApplicationMain
      • main函数中执行了一个UIApplicationMain这个函数
      • int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
      • argcargv:直接传递给UIApplicationMain进行相关处理即可
      • principalClassName:指定应用程序类app的象征),该类必须是UIApplication(或子类)。如果为nil,则用UIApplication类作为默认值
      • delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议
      • UIApplicationMain函数会根据principalClassName创建UIApplication对象,根据delegateClassName创建一个delegate对象,并将该delegate对象赋值给UIApplication对象中的delegate属性
      • 接着会建立应用程序的Main Runloop(事件循环),进行事件的处理(首先会在程序完毕后调用delegate对象的application:didFinishLaunchingWithOptions:方法)
      • 程序正常退出时UIApplicationMain函数才返回

原文地址:https://www.cnblogs.com/LDSmallCat/p/4967932.html