UIApplication

什么是UIApplication?

UIApplication对象是应用程序的象征
一个应用程序只有一个UIApplication对象,而且是单例的。
通过[UIApplication sharedApplication]可以获得这个单例对象
一个iOS程序启动后创建的第一个对象就是UIApplication对象
利用UIApplication对象,能进行一些应用级别的操作

UIApplication单例

//设置应用程序图标右上角的红色提醒数字
@property(nonatomic)NSInteger applicationIconBadgeNumber;

//设置联网的状态
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

实现一个类似于UIApplication的类,模仿系统单例


//Person.h
@interface Person : NSObject
+(void)sharedPerson;
@end
//Person.m
@implementation Person
static Person *_instance;
+(void)sharedPerson{
    return _instance;
}
//当类被加载到内存中,就会调用
+(void)load{
    NSLog(@"%@",__func__);
    _instance = [[Person alloc] init];
    
}
+(instancetype)alloc{
    if(_instance){
        //程序崩溃
        NSException *exc = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person" userInfo:nil ];
        //抛出异常
        [exc raise];
    }
    return [super alloc];
}
@end

UIApplication功能

//设置提醒图标
UIApplication *APP = [UIApplication sharedApplication];
//注册用户通知
UIUserNotificationSettings *notice = [UIUserNotificationSettings settingsForType:UIUserNotificationTypeBadge categories:nil];
[APP.registerUserNotificationSettings:notice];
APP.applicationIconBadgeNumber = 10;

//设置联网状态
APP.networkActivityIndicatorVisible = YES;
//设置状态栏
/*
    从ios7开始,系统提供了两种管理状态栏的方式
    通过UIViewController管理,(每一个UIViewController都可以拥有自己不同的状态栏)
    通过UIApplication管理,(一个应用程序的状态栏都由它同一管理)
*/
//方式1:控制器管理方式
-(UIStatusBarStyle)preferredStatusBarStyle{
     return UIStatusBarStyleLightContent;
}
-(BOOL)prefersSttusBarHidden{
     return NO;
}
//方式2:通过UIApplication管理
info.plist文件中将控制器管理状态栏设置为NO
再设置
APP.statusBarHidden = YES;
APP.statusBarStyle = UIStatusBarStyleLightContent;

//打电话
[APP openURL:[NSURL URLWithString:@"tel://10086"]];
//发短信
[APP openURL:[NSURL URLWithString:@"sms://10086"]];
//发邮件
[APP openURL:[NSURL URLWithString:@"mailto://10086@123.com"]];
//打开网页
[APP openURL:[NSURL URLWithString:@"http://www.520it.com"]];

UIApplication代理

1.所有的移动操作系统都有个致命的缺点,app很容易受到打扰。比如一个来电或者锁屏会导致app进入后台甚至被终止
2.还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件
3.每个项目新建完成后,都有个“AppDelegate”字眼的类,它就是UIApplication的代理

AppDelegate文件

///>  app 启动完成 程序准备开始运行   
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

///>  app 进入活跃状态,获取焦点(能否与用户进行交互)
- (void)applicationDidBecomeActive:(UIApplication *)application 

///>  app 进入非活跃状态,失去焦点   如:打开状态栏 来电话 等等 只会调用此方法。不会调用进入后台
- (void)applicationWillResignActive:(UIApplication *)application 

///>  app 进入后台 会调用 (app 进入非活跃状态)的方法
- (void)applicationDidEnterBackground:(UIApplication *)application 

///>  app 进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application 

///>  app 即将退出  杀死程序
- (void)applicationWillTerminate:(UIApplication *)application 
//APP收到内存警告,在这个方法中可以做一些清除缓存的操作
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

给Controller添加通知 所以我们只需要添加前面两个就可以了
   // app进入活跃状态   
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
   // app进入非活跃状态
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
   
   // app进入前台
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
   // app进入后台
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground) name: UIApplicationDidEnterBackgroundNotification object:nil];


程序启动调用顺序:
1.app 启动完成 程序准备开始运行
2.app 进入活跃状态

打开状态栏调用顺序
1.app 进入非活跃状态

关闭状态栏调用顺序
1.app 进入活跃状态 「 有延迟 大约1s 」

进入后台调用顺序 --> 点击Home键
1.app 进入非活跃状态
2.app 进入后台

进入前台调用顺序
1.app 进入前台
2.app 进入活跃状态

双击Home键盘
1.app 进入非活跃状态

杀死app
1.app 进入后台
2.app 即将推出

应用程序启动原理

1.程序启动,首先执行main函数
2.执行UIApplicationMain函数,第三个参数:设置应用程序对象的名称UIApplication或者是它的子类,如果是nil,默认是UIApplication。第四个参数:NSStringFromClass:AppDelegate将类名转化为字符串
3.开启了一个事件循环(主运行循环,死循环,保证应用程序不退出)
4.加载应用程序info.plist文件(判断info.plist文件当中有没有mainStoryboard参数,如果有,就去加载main.storyboard)
5.应用程序启动完毕,(通知代理应用程序启动完毕)didFinishLaunchingWithOptions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值