程序启动
来源:互联网 发布:org.w3c.dom.node 编辑:程序博客网 时间:2024/05/18 02:29
程序启动
- 程序启动
- UIApplication单例
- 1什么是UIApplication
- 2UIApplication的作用
- 3模仿一个UIApplication单例
- UIApplication功能
- 1app右上角标数字
- 2连网状态
- 3设置状态栏
- 1由控制器设置状态栏
- 2由UIApplication来设置状态栏
- 4跳转
- UIApplication代理
- 1UIApplication的delegate的意义
- 2UIApplication的delegate能处理的事情
- 3代理监听app处在什么周期并在各个周期执行对应的方法
- app启动
- 1流程
- 2main函数
- UIApplication单例
UIApplication单例
1、什么是UIApplication?
UIApplication代表一个app
每个app都有一个UIApplication对象,该对象由系统自动创建,是一个单例对象
app启动后创建的第一个对象就是UIApplication对象
只能拿到(获取)这个UIApplication对象,不能创建,获取方法:
[UIApplication sharedApplication]
2、UIApplication的作用?
- 应用级别的操作
- 设置app图标右上角标数字
- 设置app状态栏
- app之间的跳转
3、模仿一个UIApplication单例
要求
- 程序一启动就创建对象
- 只能通过share方法获取对象
- 不可alloc操作,若alloc、则崩溃
//1、当类加载到内存后执行load方法、比main方法更先执行static Person *_instance;+ (void)load{ /** 创建的对象用成员属性保存,但类方法无法访问成员属性; 使用静态变量来保存创建的对象 */ //创建对象 _instance = [[self alloc] init];}//2、类方法sharePerson+ (instancetype)sharePerson{ return _instance;}//3、对这个类执行alloc方法会崩溃,可以重写alloc方法,+ (instancetype)alloc{ //当调用alloc方法,判断_instance是否有值,若有、抛出异常 if(_instance){ //创建异常 NSException *exception = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instanca" userinfo:nil]; //抛出异常 [exception raise]; } //保持系统做法 return [super alloc];}
UIApplication功能
1、app右上角标数字
// iOS8之后 需先给app注册一个通知对象,才能接收提醒// 1、获取appUIApplication *app = [UIApplication sharedApplication];// 2、注册通知对象UIUserNotificationSettings *notice = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];[app registerUserNotificationSettings:notice];// 3、设置提醒数字app.applicationIconBadgeNumber = 10;
2、连网状态
// 获取appUIApplication *app = [UIApplication sharedApplication];//显示 状态栏上网络活动状态app.networkActivityIndicatorVisible = YES;
3、设置状态栏
3.1、由控制器设置状态栏
//在控制器中设置状态栏的样式- (UIStatusBarStyle)preferredStyleBarStyle{ return UIStatusBarStyleLightContent; }//在控制器中设置是否要隐藏状态栏- (BOOL)prefersStatusBarHidden{ // YES:隐藏 NO:不隐藏 return NO;}
3.2、由UIApplication来设置状态栏
默认是由控制器来设置状态栏,若要UIApplication控制,现在info.plist中取消控制器的权限
添加key view controller-based status bar appearance
= NO
// 获取appUIApplication *app = [UIApplication sharedApplication];// 设置状态栏样式app.statusBarStyle = UIStatusBarStyleLightContent;// 设置状态栏是否隐藏app.statusBarHidden = YES;
4、跳转
// 获取appUIApplication *app = [UIApplication sharedApplication];/**URL 协议头://域名app根据协议头的类型去做域名对应的事情*/// 1、跳转链接 协议头 http[app openURL:[NSURL URLWithString:@"http://www.baidu.com"]];// 2、拨打电话 协议头 tel[app openURL:[NSURL URLWithString:@"tel://10086"]];// 3、发短信 协议头 sms[app openURL:[NSURL URLWithString:@"sms://10086"]];
UIApplication代理
UIApplication会在程序启动时候创建一个遵守协议的代理
1、UIApplication的delegate的意义
- 处理系统事件,相当于助理(秘书)处理订票、业务之类的事情;
2、UIApplication的delegate能处理的事情:
- app的生命周期事件(程序启动…关闭)
- 系统事件(来电)
- 内存警告
3、代理监听app处在什么周期,并在各个周期执行对应的方法
// app启动完成时,调用此方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {NSLog(@"%s",__func__);return YES;}// app即将失去焦点时 调 - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"%s",__func__);}//app完全获取焦点的时候调(app完全获取到焦点,才能与户交互)- (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"%s",__func__);}//app完全进后台的时 调 - (void)applicationDidEnterBackground:(UIApplication *)application{ NSLog(@"%s",__func__);}// app即将进前台的时调 - (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"%s",__func__);}//app即将关闭时调用- (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"%s",__func__);}
app启动
1、流程
- 执行main函数
- 执行UIApplicationMain函数
- 创建UIApplication对象,并设置UIApplicationMain对象的代理
- 开启住运动循环,保证程序不会退出
- 加载info.plist,判断是否指定main,若指定、则加载Storyboard
2、main函数
程序启动默认执行main函数
int main(int argc, char * argv[]) {@autoreleasepool {/**第三个参数:UIApplication类名或者子类的名称 nil == @"UIApplication" 第四个参数:UIApplication的代理的代理名称 NSStringFromClass:把类名转化字符串 NSStringFromClass好处:1.有提示功能 2.避免输入错误*/return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); }}
阅读全文
0 0
- 程序启动
- 程序启动
- 程序启动程序
- Android 程序启动另一个程序
- iOS程序启动程序原理
- DNS后台启动程序
- 程序启动画面
- 转载:程序开机启动
- 启动外部程序
- 程序二次启动
- WINDOWS启动程序揭密
- 程序自启动位置
- linux 程序自动启动
- 程序启动大汇总
- 程序开机自动启动
- 开机自动启动程序
- 开机自动启动程序
- 在线启动air程序
- SpringBoot~整合mybatis+微服务注册
- android 事件分发
- java IO流拷贝文件时出现文件夹“(拒绝访问)”的原因以解决方法
- CSS居中方法介绍
- NPM基本操作
- 程序启动
- node学习笔记(三)
- CString的几个使用方法
- iWatch开发的真机调试适配攻略
- php 计算两点地理坐标的距离
- 本地图片在线预览
- 关于druid数据连接池maven方式简易配置流程
- 结构体定义 typedef struct 用法详解和用法小结
- 不解压直接查看tar包内容