前面提到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. HDU 1001 Sum Problem

    /* 注意可以是负整数,而且在过程中会超过int,所以要用longlong */ #include <cstdio> int main() { long long n; while (sc ...

  2. docpad建站记录

    记一下用docpad建站的过程作为备忘.不定时更新 why docpad wordpress对我来说太过于臃肿,我就想要个代码干净的小站来写东西.想要个markdown为基础的静态站. 比较流行的St ...

  3. Android ScrollView嵌套HorizontalScrollView 滑动问题 ScrollView包括GridView显示问题

    今天项目使用到ScrollView嵌套HorizontalScrollView,ScrollView里包括GridView,发现几个问题非常经典.在此记录: 问题1.ScrollView嵌套Horiz ...

  4. cocos2d基础入门

    HelloCpp中Classes目录下放开发者自己的类: win32:平台相关,coco2d已默认创建:coco2d-x目录下,samples/cpp/HelloCpp/(工程根目录)图片放置位置:根 ...

  5. 行列转换小结 Pivot ,Unpivot (转,改)

    行专列 Pivot 1)SQL 2000版本 静态 SELECT ID , SUM(CASE Code WHEN 'Item1' THEN Value END) AS Item1 , SUM(CASE ...

  6. BZOJ 3304: [Shoi2005]带限制的最长公共子序列( LCS )

    求个LCS, 只是有了限制, 多加一维表示匹配到z串的第几个, 然后用滚动数组 ------------------------------------------------------------ ...

  7. 新建linux组、用户命令

    之前在安装oracle的时候,出现了一个问题:安装Oracle,新建组.用户的时候的一个错误.看这篇博客前,先看这个链接,学习要从解决出现的问题出手. 建立用户组和用户 下面总结一下Linux建立组和 ...

  8. [LeetCode]题解(python):028-Implement strStr()

    题目来源: https://leetcode.com/problems/implement-strstr/ 题意分析: 输入两个字符串haystack和needle,如果needle是haystack ...

  9. 报错:loaded the "" nib but didn't get a UITableView

    在加载OpenPosition界面的时候报错:loaded the "" nib but didn't get a UITableView 原因: If you have a NI ...

  10. Nginx阅读笔记(四)之root和alias

    nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...