UIApplication
1.单例
UIApplication *app =[UIApplication sharedApplication]
2.UIApplication对象是程序启动后创建的第一个对象
3.主要作用是创建主运行循环(死循环),避免程序一启动就马上关闭利用他可以做一些应用级别的操作
例:
// 注册用户的通知
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
[app registerUserNotificationSettings:setting];
//设置应用程序的提醒数字
app.applicationIconBadgeNumber = 10;
//设置联网状态
app.networkActivityIndicatorVisible = NO;
//设置状态栏是否隐藏
app.statusBarHidden = YES;
**用UIApplication来管理状态栏是可以做动画效果的
//设置状态栏隐藏动画
[app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
//设置状态栏的颜色
[app setStatusBarStyle: UIStatusBarStyleLightContent animated:YES];
// URL:资源全路径
// URL:协议头://路径
// 根据协议头判断用什么软件去打开:tel:->拨号软件 http: 网页
[app openURL:[NSURL URLWithString:@"http://www.baidu.com"]];
Tip:
一般情况下 状态栏都是由控制器管理
-(BOOL)prefersStatusBarHidden;//设置是否隐藏
-(UIStatusBarStyle)preferredStatusBarStyle;//设置状态栏颜色
如下设置info.plist 则取消控制管理 只能UIApplication对象管理
UIApplicationDelegate
// 应用程序的生命周期方法
// 程序加载完毕的时候调用,在这个方法之前,加载info.plist文件,加载启动图片
- (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
*****UIApplicationMain底层做的事情*****
1.创建UIApplication对象
2.创建AppDelegate对象 ,并且赋值给UIAppLictaion对象的代理属性
3.开启主运行循环
4.加载info.plist 判断是否指定main.storyboard 如果指定就去加载
5.加载main.storyboard底层
1)先创建UIWindow对象
2)加载storyboard,创建控制器
3)把新创建的控制器作为窗口的跟控制器 让窗口显示在屏幕上
***没有main.storyboard则代码创建控制器
1.设置rootViewController
2.makeKeyAndVisible
控制器view的加载(loadView)
当第一次用到控制器的view时就会调用loadview方法来创建控制器的view(如果重写 则需要手动创建view)
底层实现
1)判断有没有指定storyboard
2)判断有没有指定的xib
3)如果没有则会直接创建几乎透明的view