【读书笔记】iOS-GCD-block-后台执行

当一个app按home键退出的时候。仅仅有最多5秒的时间做一些保存或清理资源的工作。

可是调用beginBackgroundTaskWithExpirationHandler方法,能够最多有10分时间在后台执行。我们能够用这个时间来做清理本地缓存,发送统计数据等事情。

AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

//后台长久执行
@property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

@end

AppDelegate.m

//当app进入后台的时候
- (void)applicationDidEnterBackground:(UIApplication *)application {
    [self beingBackgroundUpdateTask];
    //须要长久执行的代码
    [self endBackgroundUpdateTask];
}
#pragma -mark -functions
- (void)beingBackgroundUpdateTask
{
    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
    }];
}
- (void)endBackgroundUpdateTask
{
    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
    self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}

參考资料:

http://www.devtang.com/blog/2012/02/22/use-gcd/

时间: 2024-10-27 07:26:41

【读书笔记】iOS-GCD-block-后台执行的相关文章

读书笔记——IOS之Web开发

Web开发 读书笔记:http://www.mincoder.com/article/2576.shtml 主要的请求方法 Get请求:数据以明文在URL中,数据量小 Post请求:数据大小没有限制 HEAD请求:请求头信息 程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSMutableURLRequest则可以指定请求方法(GET或POST)等信

[读书笔记]iOS与OS X多线程和内存管理 [GCD部分]

3.2 GCD的API 苹果对GCD的说明:开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中. "Dispatch Queue"是执行处理的等待队列.通过dispatch_async函数等API,在Block语法中记述想执行的处理并追加到Dispatch Queue中,Dispatch Queue按照追加的顺序,执行处理. Dispatch Queue分为两种: 种类 说明 Serial Dispatch Queue 等待现在执行中处理结束(顺序执行) Co

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-3]

2.3.2 截获自动变量 通过转换后的源码可以发现,Block语法中使用的自动变量被作为成员变量追加到__main_block_impl_0结构体中,Block中没有使用的自动变量不会被追加,所以Block的变量截获只针对Block使用的自动变量. 源码: #include <stdio.h>//不导入库文件无法运行 int main() { int val1=0; int val2=10; void(^testBlock)(void)=^{ printf("i am testBlo

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-4]

2.3.5 __block变量存储域 Block变量从栈复制到堆时对__block变量产生的影响 __block变量存储域 影响 栈 从栈复制到堆并被Block持有 堆 被Block持有 在多个Block中使用__block变量时,第一个Block从栈复制到堆时,__block变量也一并从栈复制到堆.在之后的Block从栈复制到堆时,__block变量被Block持有,__block变量引用计数增加.之前__block变量结构中的__forwarding能够做到"不管__block变量在栈上还是

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-2]

2.3 Blocks的实现 2.3.1 Block的实质 通过命令"clang -rewrite-objc 文件名"能够将含有Block语法的源代码转换为C++源代码. 含有Block的源代码如下: #include <stdio.h>//不导入库文件无法运行 int main() { void(^testBlock)(void)=^{ printf("i am testBlock"); }; testBlock(); } 转换后的代码有五百行左右,这里

[读书笔记]iOS与OS X多线程和内存管理 [Blocks部分-1]

第二章 Blocks 2.1 Blocks摘要 Blocks是C语言的扩充功能,是带有自动变量(局部变量)的匿名函数. Blocks保存自动变量的值. Blocks不是Objective-c独有的概念,在其他语言中(如Smalltalk或Ruby)也有对应的概念. 2.2 Blocks模式 2.2.1 Block语法 ^ 返回值类型 参数列表 表达式 返回值类型可以省略 ^ 参数列表 表达式 参数列表也可以省略 ^ 表达式 2.2.2 Block类型变量 可将Block语法赋值给声明为Block

[读书笔记]iOS 7 UI设计 对比度

好久没写随笔了,最近在读<iOS 7 byTutorials>,很不错,推荐给大家. 每一个好的程序员也都是一个设计师,不懂设计的程序员不是好的CTO.哈哈,开个小玩笑. iOS 7设计的核心思想就是:-------->简洁.但在简洁的UI里面如何让用户发现当前界面的重点,对比度是我们最有力的工具. 对比度有下列四种用途 1.突出重点,淡化非重点 2.加强视觉效果 3.告诉用户哪里可以点击 4.增强文字可读性 举例说明,如图 这是一个简单的闹钟程序,先别着急往下看,先思考一下,这个界面在

Java并发编程实践读书笔记(3)任务执行

类似于Web服务器这种多任务情况时,不可能只用一个线程来对外提供服务.这样效率和吞吐量都太低. 但是也不能来一个请求就创建一个线程,因为创建线程的成本很高,系统能创建的线程数量是有限的. 于是Executor就出现 了. Executor框架 线程池的意义 线程创建太少了浪费服务器资源,另外线程创建多了又搞得服务器很累.两个极端的结果都是对外的吞吐量上不去. 所以线程是需要统一管理的,不能随便new Thread().start(). Executor提供了四种线程池. ExecutorServ

iOS GCD的 一次性执行、定时器、迭代、队列组

IOS的后台执行

写在前面给大家推荐一个不错的站点  www.joblai.com 本文章由央广传媒开发部 冯宝瑞整理.哈哈 http://www.cocoachina.com/bbs/read.php? tid=149564 文一 我从苹果文档中得知,一般的应用在进入后台的时候能够获取一定时间来执行相关任务,也就是说能够在后台执行一小段时间. 还有三种类型的能够执行在后以, 1.音乐 2.location 3.voip 文二 在IOS后台运行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这