先说点题外话:
UIApplication是应用程序系统的单例对象,单例到底是什么呢?下面是我的解释:
单例在应用程序只有一份内存,并不会分配很多的内存.
前面的最初我也解释了单例
一.先讲讲UIApplication能做些什么??
- 1.设置应用程序图标的提醒数字
代码如下
有必要说一下UIApplication使用单例创建的,但里的常见一般是share+类名
//1.获取应用程序的对象 UIApplication *app = [UIApplication sharedApplication]; //2.设置应用程序图标的提醒数字 app.applicationIconBadgeNumber = 100; //3.创建通知对象 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; //4.注册用户新通知 [app registerUserNotificationSettings:setting];
- 2.设置联网的提示
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
- 3.设置状态栏
(1).在iOS7之后,状态栏默认交给控制器来管理了(需要早info.plist里面进行设置:先添加addrow 输入大写APP,徐泽最后一个View controller-based status bar appearance = NO),这样就不再由控制器来管理状态栏了,下面的代码才能起到效果
还需要在info.plist
配置(只有配置了,下面的这句话才能将状态栏隐藏)
app.statusBarHidden = YES;
(2).如果想用控制器来控制就用下面的方法
-(BOOL)prefersStatusBarHidden { return YES; }
(3).手动更改iOS状态栏的颜色
- (void)setStatusBarBackgroundColor:(UIColor *)color
{
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { statusBar.backgroundColor = color; } }
- 4.打电话,发短息,打开网页
//URL:资源的唯一路径(唯一的标识符) [app openURL:[NSURL URLWithString:@"www.baidu.com.cn"]];
二.讲讲main.m里面UIApplicationMain 底层的实现
//1.根据principalClassName传递的类名创建UIApplication对象 //2.创建UIApplication代理对象,给UIApplication 对象设置代理 //3.开启主运行事件循环,处理事件 //4.加载info.plist,判断下是否指定main,如果制定了,就会去加载 * @param nil UIApplication 类名或者子类的名称 nil == @"UIApplication" * @param class] UIApplication代理的类型的名称 * * NSStringFromClass 将类名转化为字符串 == @"AppDelegate" * @return NSStringFromClass :功能1.是为了有提示功能 2.避免输入错误 UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName); return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
四.最后附上一张图