一、基础知识

  1) main.m指定了程序的入口点

UIApplicationMain(argc, argv,nil,NSStringFromClass([StartingPointAppDelegateclass]));

  2) AppDelegate的入口点

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

  3) 前台和后台程序切换执行方法

- (void)applicationWillEnterForeground:(UIApplication *)application {}
程序将置于前台,程序启动的时候不会相应此方法,而是按下home以后再次回复程序的时候响应。
- (void)applicationDidBecomeActive:(UIApplication *)application {}
程序已经置于前台,程序刚启动也会响应此方法。按下home以后再次回来也会响应。
- (void)applicationWillResignActive:(UIApplication *)application {}
程序将要退出后台,按下home以后,程序不会立即消失,系统会先调用此方法。
- (void)applicationDidEnterBackground:(UIApplication *)application {}
程序已经置于后台了,按home以后,程序完全消失会调用。

二、程序后台运行

  1)在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。

  注意:
      当多程序切换的时候,程序不会被关闭,在系统规定的一段时间内可以正常执行。
      当一个程序使用的内存太大,而导致系统内存不足的时候,程序会被关闭,任务会终止,直到下次启动程序,并退到后台的时候,后台任务才会重新执行。
      运行的条件必须在软件不被关闭的情况下可用。

// AppDelegate.h
@property (assign, nonatomic) UIBackgroundTaskIdentifier* backgroundTaskIdentifier; // AppDelegate.m - (void)applicationDidEnterBackground:(UIApplication *)application {
[self beingBackgroundUpdateTask];
NSLog(@"加上你需要多久运行的代码");
NSLog(@"剩余执行时间: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
[self endBackgroundUpdateTask];
} -(void) beingBackgroundUpdateTask {
self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
} -(void) endBackgroundUpdateTask {
[[UIApplication sharedApplication] endBackgroundTask: self.backgroundTaskIdentifier];
self.backgroundTaskIdentifier = UIBackgroundTaskInvalid; }

  2) 每隔一段时间,系统自动执行的任务(设置的值必须大于等于600)

    注意:
       当多程序切换的时候,此任务也会被关闭。
         运行的条件必须在软件不被关闭的情况下可用

    执行的必要条件:
        找到程序的 plist 配置文件,增加:
        键:UIBackgroundModes 类型:Array
        在 Item0 里面设置类型:String,值:voip

[[UIApplication sharedApplication] setKeepAliveTimeout: handler:^{
//执行你想要执行的任务,同时可以配合第一种任务,以增加某些同步方法的执行时间,比如说下载数据等
}];

AppDelegate的更多相关文章

  1. 谈谈AppDelegate

    谈谈AppDelegate 前言 每个iOS程序都会有一个AppDelegate的类,这个类就是一个代理类,我们新建一个Project的时候,里面都会带有这个类.现在就让我们看看这个类. 开始介绍 对 ...

  2. cocos2d-x打飞机实例总结(一):程序入口分析和AppDelegate,Application,ApplicationProtocol三个类的分析

    首先,是个敲代码的,基本上都知道程序的入口是main函数,显然,就算在cocos2d-x框架中也一样 我们看看main函数做了什么 #include "main.h" #inclu ...

  3. [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象

    由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...

  4. Coding源码学习第一部分(AppDelegate.m)

    前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ...

  5. cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。

    cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.

  6. 应用程序代理AppDelegate解析

    应用程序UIApplication是通过代理和外部交互的,当应用程序生命周期中发生改变时UIApplication就会调用代理对应的方法. @implementation AppDelegate - ...

  7. IOS应用程序生命周期的AppDelegate详解

    IOS 中的 AppDelegate.m/h 文件是很重要的呢,因为它是对 Application 的整个生命周期进行管理的. 先明白,每个iPhone应用程序都有一个UIApplication,UI ...

  8. ios开发之AppDelegate

    创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件.   AppDelegate为何物?  AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...

  9. 【转】ios开发之AppDelegate

    创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件.   AppDelegate为何物?  AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...

随机推荐

  1. Burp Suite详细使用教程

    Burp Suite详细使用教程-Intruder模块详解 最近迷上了burp suite 这个安全工具,百度了关于这个工具的教程还卖900rmb...ohno.本来准备买滴,但是大牛太高傲了,所以没 ...

  2. Rotating Sentences

    #include<bits/stdc++.h> #define N 110 int main(void) { char s[N][N]; int i, j, k, max; , memse ...

  3. 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)

    报错信息大致如下所示: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect. ...

  4. SPOJ839 Optimal Marks(最小割)

    题目大概说给一张图,每个点都有权,边的权等于其两端点权的异或和,现已知几个点的权,为了使所有边的边权和最小,其他点的权值该是多少. 很有意思的一道题,完全看不出和网络流有什么关系. 考虑每个未知的点$ ...

  5. LightOJ1125 Divisible Group Sums(DP)

    题目问从N个数中取出M个数,有多少种取法使它们的和能被D整除. dp[i][j][k]表示,前i个数取出j个数模D的余数为k的方案数 我用“我为人人”的方式来转移,就从i到i+1转移,对于第i+1个数 ...

  6. 骨牌铺方格[HDU2046]

    骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. 循环多少次?[HDU1799]

    循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. 删除mysql

    我以前遇到过删除mysql如果删除不干净的话,下次无法安装,也无法启动服务. 如今找到了解决方案 前言:只适用在Windows下--在控制面板中删除MySQL程序--然后在C盘中删除MySQL文件夹- ...

  9. BZOJ3790 : 神奇项链

    Manacher求出所有极长回文子串后,得到一堆线段,转化成线段覆盖问题 预处理出g[i]表示左端点不超过i的右端点的最大值 贪心地线段覆盖即可 时间复杂度$O(n)$ #include<cst ...

  10. Codeforces Round #192 (Div. 2) B. Road Construction

    #include <iostream> #include <vector> using namespace std; int main(){ int n,m; cin > ...