文档章节

iOS从程序的点击到程序死亡(App的一辈子)

gitzhengjianhua
 gitzhengjianhua
发布于 2016/11/17 18:27
字数 1036
阅读 150
收藏 0

项目中出现了一个消息角标设置的bug,涉及到UIApplication对象的处理。在此记录下加深对UIApplication的理解。

一、UIApplication的基础认识

UIApplication是应用级别的一个单例。我们一个应用启动到内存释放始终且只对应一个UIApplication对象,此对象控制着应用级别的交互,如打开其它应用等。此外其代理提供给我们应用启动、退出到后台、重新进入、退出等操作。

1、UIApplication对象属性

windows        添加的window

keyWindow     程序的主window,程序在每个时刻只能有一个主window。比如每个警告框就是一个window但是在每一个时刻只能有一个主window。当警告框显示的时候警告框就是主window。同理键盘事件也是一样。

networkActivityIndicatorVisible  联网可见性

statusBarStyle   状态栏样式

statusBarHidden  状态栏的显示

statusBarOrientation  状态栏方向

statusBarOrientationAnimationDuration  当改变状态栏的时候动画的改变时间

statusBarFrame  状态栏的frame(没有隐藏的时候)

applicationIconBadgeNumber  程序图案icon图上的角标

applicationSupportsShakeToEdit  摇一摇

applicationState  App此时的状态(正在前台运行或进入后台挂起)

backgroundTimeRemaining  进入后台后可以执行的时间(当程序进入后台后,可以运行代码的时间是有限的,如果延长了执行时间此属性会返回总共剩余时间)

- (BOOL)openURL:(NSURL*)url  可通过此方法打开其它程序(吊起电话或者打开浏览器等)

2、UIApplicationDetegate--程序代理

当App被打开、处于前台运行状态、被事件打断运行、home键进入后台、重新进入前台运行、内存警告、退出等我们都能通过UIApplicationDetegate的代理事件拿到相关接口。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

app启动完成的时候,执行此通知,在此我们初始化界面什么的。也就是平时我们写的。
    return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {

当App不活跃的时候,暂时挂起的状态比如接入电话等。注意当home键返回桌面,程序进入后台的时候并不会触发此通知
}
- (void)applicationDidEnterBackground:(UIApplication *)application {

当我们点击home键返回桌面程序进入后天的时候触发此通知。此时iOS系统允许程序可以有5s钟的时间运行代码。当然可以向系统申请更长的运行时间但是程序在后台不能存活过10分钟,10分钟过后会系统会强制挂起程序。如果内存吃紧的话,会释放此App所占用的内存给其他程序使用。
}
- (void)applicationWillEnterForeground:(UIApplication *)application {

从后台到前台的一个过渡时间段
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
    程序变为活跃状态,注意的是程序启动或者当程序在后台内存还没有被系统回收处于挂起状态(内存被回收后点击App会重新启动,没有被回收点击App直接回到按home键时的界面)都会走此方法。
}
- (void)applicationWillTerminate:(UIApplication *)application {
    程序退出时执行的方法。比如双击home键后将程序上划退出。
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{

发生内存警告时触发的方法
}

// 当应用程序启动完毕的时候就会调用(系统自动调用)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"didFinishLaunchingWithOptions");
    return YES;
}

二、程序的创建和退出

每个项目中都有一个main函数,它是我们App和系统的接口,创建运行App:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

UIApplicationMain创建了UIApplicationnil(nil--系统默认传入一个UIApplication)和UIApplicationDelegate(NSStringFromClass([AppDelegate class])。此外其还帮我们开启了一个runloop,就是循环-死循环。runloop中不断的监听各种的系统事件,比如home键有没有按下、有没有接入电话等等。当监听到后会触发对应的代理方法如home键按下后让程序进入后台并触发AppDelegate中的系统进入后台的方法,执行我们的代码。

 

 

© 著作权归作者所有

gitzhengjianhua

gitzhengjianhua

粉丝 4
博文 25
码字总数 23833
作品 3
渭南
私信 提问
iOS Provisioning Portal概述

注意: iOS Provisioning Portal 仅可以在PC上的 Safari和Firefox浏览器中有效。 iOS Provisioning Portal概述 概述 和 provisioning(服务提供) 助手执行的自动设置不同, iOS Provisioning...

JohnZr
2012/09/26
25
0
雷军22年前写的代码 你见过吗?

雷军22年前写的代码 你见过吗? 2018-07-04 10:15编辑: suiling分类:程序人生来源:程序师 程序人生代码雷军 招聘信息: iOS开发 iOS开发 iOS开发 app开发上架H5技术 app开发技术 图像处理...

suiling
2018/07/04
0
0
IOS App开启iTunes文件共享

关于IOS文件目录的一点记录 IOS的文件系统面向的是设备上的每个运行的应用程序。为了保证IOS系统的可用性和简单性,IOS设备的终端用户是无法直接访问文件系统的,同时设备上的app与用户一样也...

big军
2013/03/08
23.1K
0
如何在iOS和Android的应用程序中共享Kotlin代码的功能

     在本文中,我将使用Kotlin的代码共享特性创建一个iOS和Android应用程序。对于Android,我将使用Kotlin/JVM,而对于iOS,我将使用Kotlin/Native。   你将在本文中学习到以下内容:...

嘶吼RoarTalk
2018/10/23
0
0
使用 Countly 来分析 Apple Watch 统计数据

期待已久的 Apple Watch 在上市当日预购了将近一百万,已经开始在全球发货了。考虑到 Apple Watch 的销售量已经在一天内达到了,我们可以说智能手表将会是用户生活中一个更重要的部分,尤其是...

oschina
2015/05/19
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

安全组和云防火墙的区别

前言 熟悉云平台的朋友可能都会注意到这样一个事情:无论公有云还是私有云,创建虚拟机的时候都需要选择安全组,来对虚拟机进行安全防护;有的云平台在VPC里,还能选择防火墙,ZStack在3.6版...

ZStack社区版
20分钟前
1
0
教育性app开发的重要性和好处

在这个精通技术的世界中,流行的app主导着无聊的教育系统。当我们将技术和教育结合在一起时,它将带来当代以及强大的学习资源。因此,将教育移动app集成到您的学习过程中,并根据自己的信念把...

a429011717
21分钟前
2
0
IE6/7/8如何兼容CSS3属性

本文转载于:专业的前端网站➩IE6/7/8如何兼容CSS3属性 最近在工作中总是要求IE8兼容CSS3属性,在网上搜了搜主要是引入了一个htc文件(ie-css3.htc或者PIE.htc。个人认为这两个文件的作用差不...

前端老手
36分钟前
2
0
手把手教你ALLEGRO的约束规则的设置教程!

约束规则的设置 分三步, 定义规则(一、基本约束规则设置:1、线间距设置;2、线宽设置;3、设置过孔;4、区域约束规则设置;5、设置阻抗;6、设置走线的长度范围;7、设置等长:7.1、不过电阻的NET 等...

demyar
38分钟前
3
0
完美解决H5滚动滑动穿透方案:不使用系统滚动

网上有很多黑科技解决这个问题,都不是从根本去解决,例如通过js控制弹出时html加上position:fixed; 弹窗关闭后再去掉该样式,总觉得不太对,像是打补丁。 今天终于找到了滚动穿透的原因和完...

未来cc
43分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部