UIApplication
-
基本概念
- UIApplication对象是应用程序的象征,每一个应用都有自己的UIApplication对象,而且是单例模式的,不能通过 alloc init 方式创建,一个程序只允许一个
- 一个 iOS 程序启动创建的第一个对象就是 UIApplication 对象,并且可以做一些应用级别的操作
-
基本属性方法
@property(nonatomic) NSInteger applicationIconBadgeNumber;
设置应用程序图标右上角的红色提醒数字@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
设置联网指示器的可见性-
-(BOOL)openURL:(NSURL *)url
十分强大的方法// TEL UIApplication *app = [UIApplication sharedApplication]; [app openURL:[NSURL URLWithString:@"tel://10086"]]; // SMS [app openURL:[NSURL URLWithString:@"mailto://11915805@qq.com"]] // http [app openURL:[NSURL URLWithString:@"http://www.baidu.com"]]; // 打开其他应用程序
-
StatusBar状态栏
- 从iOS7开始,系统提供了2种管理状态栏的方式
- 通过UIViewController管理(每一个UIViewController都可以拥有自己不同的状态栏)
- 通过UIApplication管理(一个应用程序的状态栏都由它统一管理)
- 在iOS7中,默认情况下,状态栏都是由UIViewController管理的,UIViewController实现下列方法就可以轻松管理状态栏的可见性和样式
-
- (UIStatusBarStyle)preferredStatusBarStyle;
状态栏的样式 -
- (BOOL)prefersStatusBarHidden;
状态栏的可见性
-
- 如果想通过 UIApplication 来管理状态栏, 首先得修改 Info.plist
- 在文件的一个行的最后个一个key:View vontroller-based status bar appearance 改为 NO
UIApplication *app = [UIApplication sharedApplication]; // 隐藏状态栏 [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
- 从iOS7开始,系统提供了2种管理状态栏的方式
-
UIApplicationdelegate
- 常用的代理方法
- 这些UIApplicationDelegate有什么用,监听应用程序的生命周期,监听内存警告,系统事件
-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
当应用程序启动完成的时候,系统会自动调用代理这个方法 -
- (void)applicationWillResignActive:(UIApplication *)application
当应用程序失去焦点的时候就会调用 -
- (void)applicationDidEnterBackground:(UIApplication *)application
当应用程序进入后台的时候就会调用 -
-(void)applicationWillEnterForeground:(UIApplication *)application
当应用程序进入前台的时候就会调用 -
- (void)applicationDidBecomeActive:(UIApplication *)application
当应用程序获取焦点的时候就会调用,只有当一个应用程序完全获取焦点的时候,应用程序才能够与用户交互 -
- (void)applicationWillTerminate:(UIApplication *)application
当应用程序关闭的时候就会调用 -
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
监听内存警告
-
main 函数中的UIApplicationMain这个函数
-
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
- argc、argv:直接传递给UIApplicationMain进行相关处理即可
- principalClassName:指定应用程序类名(app的象征),该类必须是UIApplication(或子类)。如果为nil = UIApplication
- delegateClassName:指定应用程序的代理类,该类必须遵守UIApplicationDelegate协议, 这里不能传 nil,如果传 nil 意味着 application 没有代理,就无法监听系统事件。
-
- UIApplicationMain底层做事情
- 创建一个UIApplication对象,根据principalClassName创建
- 创建UIApplication代理对象,设置UIApplication代理
- 开启一个主要的事件循环,让程序一直运行,处理事件.
- 加载Info.plist文件,判断下有没有指定main.storyboard,如果有就加载
- 常用的代理方法