前面提到AppDelegate的实例在UIApplicationMain函数中被创建并调用。

AppDelegate的主要作用,可以从其继承类可以看出 class AppDelegate:UIResponder,UIApplicationDelegate。

1. UIResponder

UIApplication,UIView,UIViewController,UIWindow等需要处理event的类都需要继承这个类。
该类可以处理iOS的所有程序员需要处理的动作event,包括touch events和motion events。
在AppDelegate类中一般不需要对该类的继承的东西进行处理,具体处理放到实际的view,viewcontroller中去做。

2. UIApplicationDelegate

这个是AppDelegate类中重点需要override的变量。官方手册 UIApplicationDelegate
UIApplicationDelegate中负责管理app的各种状态,官方手册有详细的介绍。这里只记录一些最典型的例子。
关于app的各种状态参见下图,每个状态变化时都可以override父类的方法进行编程。
代理中所有函数的第一个参数为UIApplication的单例对象,通过这个参数可以获得app的信息,比如Window的引用等。
1.当点击app即将启动时,app状态由Not Running切换到Inactive,此时如果想进行编程,可以override函数:
application(_:willFinishLaunchingWithOptions:)

2.当app完成初始处理后,即将显示画面前,会执行函数

application(_:didFinishLaunchingWithOptions:)

3.当函数被active后,如果想在看到画面前执行一些动作



applicationDidBecomeActive(_:)

4.当app即将被切换到后台



applicationWillResignActive(_:)

5.当app已经进入后台(注意进入后台的程序会因为系统内存等原因,可能随时被suspended,即被系统关闭)



applicationDidEnterBackground(_:)

6.当app从后台进入前台



applicationWillEnterForeground(_:)

7.这个函数目前基本上用不到了,即使是被手动退出app(双击home,进入退出)也不会被执行。
如果想在程序退出时执行该函数,需要在Xcode中info.plist设置 Application does not run in background



applicationWillTerminate(_:)
在各method中打印出信息,可以测试其运行
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
println("didFinishLaunchingWithOptions")
return true
} func applicationWillResignActive(application: UIApplication!) {
println("applicationWillResignActive")
} func applicationDidEnterBackground(application: UIApplication!) {
println("applicationDidEnterBackground")
} func applicationWillEnterForeground(application: UIApplication!) {
println("applicationWillEnterForeground")
} func applicationDidBecomeActive(application: UIApplication!) {
println("applicationDidBecomeActive")
} func applicationWillTerminate(application: UIApplication!) {
println("applicationWillTerminate")
}
}

App状态管理-AppDelegate的更多相关文章

  1. 对于React各种状态管理器的解读

    首先我们要先知道什么是状态管理器,这玩意是干啥的? 当我们在多个页面中使用到了相同的属性时就可以用到状态管理器,将这些状态存到外部的一个单独的文件中,不管在什么时候想使用都可以很方便的获取. reac ...

  2. 为了弄懂Flutter的状态管理, 我用10种方法改造了counter app

    为了弄懂Flutter的状态管理, 我用10种方法改造了counter app 本文通过改造flutter的counter app, 展示不同的状态管理方法的用法. 可以直接去demo地址看代码: h ...

  3. Redux状态管理方法与实例

    状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...

  4. vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  5. Vue状态管理vuex

    前面的话 由于多个状态分散的跨越在许多组件和交互间各个角落,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue提供了vuex.本文将详细介绍Vue状态管理vuex 引入 当访问数据对象时,一个 V ...

  6. 理解vuex的状态管理模式架构

    理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...

  7. 简简单单的Vue3(插件开发,路由系统,状态管理)

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了, ...

  8. vuex 状态管理 通俗理解

    解释:集中响应式数据管理,一处修改多处使用,主要应用于大中型项目. 安装: 第一:index.js:(注册store仓库) npm install vuex -D // 下载vuex import V ...

  9. Vue.js 2.x笔记:状态管理Vuex(7)

    1. Vuex简介与安装 1.1 Vuex简介 Vuex是为vue.js应用程序开发的状态管理模式,解决的问题: ◊ 组件之间的传参,多层嵌套组件之间的传参以及各组件之间耦合度过高问题 ◊ 不同状态中 ...

随机推荐

  1. 基于Visual C++2013拆解世界五百强面试题--题8-数组的排序和查找

    用三种方法实现对一个数组的排序,并设计一个函数实现数的查找,要求时间越短越好,空间占用越少越好. 对数组排序的方法很多,我们选比较常用和容易的三种排序,直接插入排序,冒泡排序和快速排序. 直接插入排序 ...

  2. 取代奶瓶Minidwep-gtk 破 WPA 全攻略

     目录 1. CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2. 自带的字典破解不出密码时使用 U 盘外挂字典继续暴力破解密码 3. 将握手包拷贝到 Windows ...

  3. invalid nib registered for identifier (重用符) - nib must contain exactly one top level object which must be a UITableViewCell instance'

    通过xib创建cell的时候 一定要注意!!! 这个错误是在这个xib中在View同一层级出现了其他的控件,检查一下xib中左边的层级关系,让cell的view是唯一的控件就可以了,否则一执行 就会提 ...

  4. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  5. mysql 中的 IF 和 IFNULL 用法

    IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. IF(S ...

  6. MVC框架浅析(基于PHP)

    MVC框架浅析(基于PHP) MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...

  7. sorl6.0+jetty+mysql

    sorl6.0+jetty+mysql搭建solr服务 1.下载solr 官网:http://lucene.apache.org/solr/ v2.目录结构如下 v3.启动solr(默认使用jetty ...

  8. chrome developer tool 调试技巧2

    我大概是从 08.09 年从 Firebug 转入 Chrome Developer Tool,一直用到现在,越用越喜欢.我平时调错时常用的功能有: 代码格式化可以将被压缩的代码自动展开 实时代码编辑 ...

  9. python测试框架--nose

      最近再浏览Python自动化测试框架,之前接触过unittest,看了篇文章,发现nose貌似更牛逼一些,于是安装试了试,分享一下心得.     nose 项目是于 2005 年发布的,也就是 p ...

  10. IT第八天 - 类的应用、debug、项目开发模式优化

    IT第八天 上午 类的应用 1.对象在实例化时是非常耗费系统资源的,因此要尽量减少new字段的使用 2.类的初始值是null,在使用未实例化的类时,很容易导致报错:NullExceptionPoint ...