UIApplication
UI
程序启动过程
- main -> UIApplicationMain -> 通知代理做事
UIApplicationMain底层实现:
// principalClassName:描述UIApplication的类名字符串
// delegateClassName:描述UIApplication代理的类名字符串
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
- 创建UIApplication对象
- 创建UIApplication的代理对象,并且设置为UIApplication的代理.
- 开启一个主运行循环,处理事件
- 加载info.plist文件,判断是否有Main.storyboard,如果有就会去加载。
- 有Main.storyboard才会执行以下步骤
- 加载Main.storyboard,
- 创建窗口
- 初始化storyboard描述的控制器
- 设置窗口的根控制器,并且显示窗口
Application创建方式
- 程序一启动系统就会自动创建
- 获取方法(单例:只会存在一份)
UIApplication *app = [UIApplication sharedApplication];
作用
- 修改程序图标的提醒数字
- 打电话、发信息
- 打开网页
- 设置联网状态
- 控制状态栏
- 修改info.plist文件中状态栏的管理方式
- 代码手动管理状态栏
UIApplication *app = [UIApplication sharedApplication];
// 要手动管理状态栏就要先修改plist文件中状态栏的管理方法
[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
AppDelegate
- AppDelegate不用自己创建,系统会默认帮我们创建。
- 会自动生成一系列方法
窗口-应用程序创建的第一个控件。
- 添加子控件,一般把窗口的根控制器添加上去,通过设置rootViewController就可以把根控制器的view添加到窗口上。
- 介绍窗口如何显示。
- 应用程序是有主窗口,通常调用makeKeyAndVisible
- window属性,可以识别应用程序中哪些控件还是窗口,有一个比较特殊,状态栏是窗口。
- window层级,alert(2000) > statusBar(1000) > normal(0)
addSubView和rootViewController的区别
- 直接用addSubView,控制器会被释放,控制器就不能处理事件,控制器的view不会自动旋转。
- 用rootViewController,控制器不会被释放,而且控制器的view会自动旋转
- 旋转事件->UIApplication ->Window->rootViewController ->旋转控制器的view