UIApplication的介绍以及底层实现原理

简介: UIApplication的介绍以及底层实现原理

先说点题外话:


UIApplication是应用程序系统的单例对象,单例到底是什么呢?下面是我的解释:


单例在应用程序只有一份内存,并不会分配很多的内存.


前面的最初我也解释了单例


一.先讲讲UIApplication能做些什么??


  • 1.设置应用程序图标的提醒数字


image.png

代码如下


有必要说一下UIApplication使用单例创建的,但里的常见一般是share+类名

//1.获取应用程序的对象
UIApplication *app = [UIApplication sharedApplication];
//2.设置应用程序图标的提醒数字
app.applicationIconBadgeNumber = 100;
//3.创建通知对象
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
//4.注册用户新通知
[app registerUserNotificationSettings:setting];


  • 2.设置联网的提示


image.png


[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;


  • 3.设置状态栏


image.png


(1).在iOS7之后,状态栏默认交给控制器来管理了(需要早info.plist里面进行设置:先添加addrow 输入大写APP,徐泽最后一个View controller-based status bar appearance = NO),这样就不再由控制器来管理状态栏了,下面的代码才能起到效果


还需要在info.plist配置(只有配置了,下面的这句话才能将状态栏隐藏)

app.statusBarHidden = YES;


image.png


(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]));


image.png


四.最后附上一张图


image.png

目录
相关文章
|
8月前
|
缓存 C++
12-objc_msgSend底层调用流程探究
12-objc_msgSend底层调用流程探究
34 0
|
8月前
|
设计模式 算法 C++
01-OC对象的底层实现之alloc、init、new源码解读
01-OC对象的底层实现之alloc、init、new源码解读
156 0
setlocale函数是干什么的?底层原理是什么?
setlocale函数是干什么的?底层原理是什么?
387 0
|
SQL PHP 数据库
PDOstatement对象是干什么的?底层原理是什么?
PDOstatement对象是干什么的?底层原理是什么?
187 0
|
iOS开发
UIWindow的讲述以及底层
UIWindow的讲述以及底层
107 0
UIWindow的讲述以及底层
|
存储 调度 iOS开发
runloop的基本概念和实现原理
runloop的基本概念和实现原理
327 0
runloop的基本概念和实现原理
|
编译器 iOS开发
iOS-底层原理 23:KVO 底层原理
iOS-底层原理 23:KVO 底层原理
154 0
iOS-底层原理 23:KVO 底层原理
|
存储 搜索推荐 API
iOS-底层原理 22:KVC 底层原理
iOS-底层原理 22:KVC 底层原理
128 0
iOS-底层原理 22:KVC 底层原理
|
程序员 iOS开发
performSelector的原理以及用法
performSelector的原理以及用法
271 0
|
存储 编解码 缓存
ffplay源码分析2-数据结构
ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放。
166 0
ffplay源码分析2-数据结构