UIApplication对象
- 在程序启动的时候,系统帮我们创建的第一个对象就是
UIApplication
对象,它是一个单例对象 - 常见属性
//显示应用右上角图标
@property(nonatomic) NSInteger applicationIconBadgeNumber;
//联网指示器可见
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;
- 常见用法
//跳转到打电话应用
UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];
启动程序的步骤
- 1、程序的入口为main.m文件
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
- 2、UIApplicationMain函数所做的几件事情(参数的作用):
- 1、nil参数:表示传进来的是
UIApplication类
或者是它的子类
- 2、NSStringFromClass([AppDelegate class]):表是为应用程序创建一个代理对象,并将类名转为字符串传给函数,例如:AppDelegate.h和AppDelegate.m文件
-
注意
:这里也可以直接写@"AppDelegate"
,但是容易写错,而且编译器不会报错,所以最好用NSStringFromClass([AppDelegate class])
- 3、在main.m中开启主事件循环(也可以理解为死循环),因为这样才能保持应用程序保持在运行状态
- 4、加载
Info.plist
文件,看看Main storyboard file base name
所要加载的storyboard文件,然后将该storyboard文件显示到屏幕上
Info - 5、程序启动完成,通知代理,然后调用
application:didFinishLaunchingWithOptions:
方法 - 6、程序正常退出时
UIApplicationMain
函数才返回
- 1、nil参数:表示传进来的是
- 2.1、模拟系统加载storyboard文件的过程:
- 系统会先创建一个窗口视图(UIWindow)
//注意:窗口要显示出来必须的步骤 1.强引用窗口 2.设置窗口的尺寸
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
- 加载storyboard文件,并且创建storyboard描述的控制器
UIViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateInitialViewController];
- 把storyboard描述的控制器设置为window的根控制器
//把控制器作为窗口的根控制器,就会把根控制器的View自动添加到窗口上
self.window.rootViewController = vc;
- 设置window为主窗口并让其显示出来
[self.window makeKeyAndVisible];
//相当于做了下面两件事
//1.application.keyWindow = self.window
//2.self.window.hidden = NO;
UIApplication相关的几个生命周期方法
// 程序启动完成的时候调用,此时UIWindow只是创建出来而已,并没有马上显示出来
- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(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;
UIWindow的相关知识点
-
iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
-
1、窗口要显示出来必须的步骤
- 强引用窗口
- 设置窗口的尺寸
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
-
2、一个应用程序至少会有一个UIWindow对象,但是这些UIWindow对象中,只能有一个能成为keyWindow。例如状态栏,键盘等都是窗口......
-
3、窗口是有层级的,层级越高,就会优先显示在屏幕之上
-
UIWindowLevelAlert
(2000层级) >UIWindowLevelStatusBar
(1000层级)>UIWindowLevelNormal
(0层级) - 由于层级是UIWindowLevel常量(CGFloat类型),所以优先级能进行加减
-