IOS开发(61)之GCD执行非UI的操作
来源:互联网 发布:园林绿化图软件 编辑:程序博客网 时间:2024/05/22 03:04
1 前言
当执行那些与 UI 无关的任务,或者与 UI 交互的任务时,和执行其他任务一样,会需要大量时间,以上情况会经常出现。我们可以使用 dispatch_sync函数在一个分派队列上执行同步任务。你必须做的事情就是提供一个此队列的句柄了,这个队列必须运行任务,并且一个代码块会在这个队列上执行。 今天我们就来学习一下GCD执行非UI的操作。
2 代码实例
TestDemo.h
#import <Foundation/Foundation.h>@interface TestDemo : NSObject-(void)testMethod;-(void)testMethod2;@end
TestDemo.m
#import "TestDemo.h"@implementation TestDemo/**************Objc Method Start*********///Block Objectvoid (^printFrom1To1000)(void) = ^{ NSUInteger counter = 0; for (counter = 1;counter <= 1000;counter++){ NSLog(@"Counter = %lu - Thread = %@", (unsigned long)counter, [NSThread currentThread]); }};//测试方法-(void)testMethod{ /* Dispatch_get_global_queue 函数的第一个参数说明了并发队列的优先级,这个属性 GCD 必须替程序员检 索。优先级越高,将提供更多的 CPU Timeslice 来获取该队列执行的代码。 Dispatch_get_global_queue 函数的第一个参数: DISPATCH_QUEUE_PRIORITY_LOW 您的任务比正常任务用到更少的 Timeslice。 DISPATCH_QUEUE_PRIORITY_DEFAULT 执行代码的默认系统优先级将应用于您的任务。 DISPATCH_QUEUE_PRIORITY_HIGH 和正常任务相比,更多的 Timeslices 会应用到你的任务中。 Dispatch_get_global_queue 函数的第二个参数已经保存了,只要一直给它输入数值 0 就可以了。 */ dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_sync(concurrentQueue, printFrom1To1000); dispatch_sync(concurrentQueue, printFrom1To1000);}/**************Objc Method End*********//**************C Method Start*********///Block Objectvoid print2From1To1000(void *paramContext){ NSUInteger counter = 0; for (counter = 1;counter <= 1000;counter++){ NSLog(@"Counter = %lu - Thread = %@", (unsigned long)counter, [NSThread currentThread]); }}//测试方法-(void)testMethod2{ /* */ dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_sync_f(concurrentQueue, NULL,print2From1To1000); dispatch_sync_f(concurrentQueue, NULL,print2From1To1000);}/**************C Method End*********/@end
main.m
#import <Foundation/Foundation.h>#import "TestDemo.h"int main(int argc, const char * argv[]){ @autoreleasepool { TestDemo *test = [[TestDemo alloc] init];// [test testMethod]; [test testMethod2]; [test release]; } return 0;}
运行结果
2013-05-10 13:50:37.361 GCDExecuteNonUITest[556:303] Counter = 1 - Thread = <NSThread: 0x10010b2c0>{name = (null), num = 1}
2013-05-10 13:50:37.363 GCDExecuteNonUITest[556:303] Counter = 2 - Thread = <NSThread: 0x10010b2c0>{name = (null), num = 1}
...2013-05-10 13:50:38.255 GCDExecuteNonUITest[556:303] Counter = 1 - Thread = <NSThread: 0x10010b2c0>{name = (null), num = 1}
2013-05-10 13:50:38.256 GCDExecuteNonUITest[556:303] Counter = 2 - Thread = <NSThread: 0x10010b2c0>{name = (null), num = 1}
3 结语
以上就是所有内容,希望对大家有所帮助。
Demo代码下载:http://download.csdn.net/detail/u010013695/5352720
- IOS开发(61)之GCD执行非UI的操作
- IOS开发(60)之使用GCD执行UI操作
- IOS开发(62)之GCD上异步执行非UI任务
- IOS开发(63)之GCD执行延迟操作
- GCD使用(一)执行与UI有关的操作
- GCD使用(二)执行与UI无关的操作
- iOS开发 GCD的延时执行
- iOS 非主线程不能执行UI操作
- IOS 多线程之GCD的详细操作
- IOS开发(64)之GCD任务最多只执行一次
- iOS 开发之 GCD解析(block 如何被添加进 queue 中,以及 block 执行)
- iOS 开发之 GCD解析(block 如何被添加进 queue 中,以及 block 执行)
- IOS开发(50)之GCD的一些小应用
- IOS开发(50)之GCD的一些小应用
- iOS GCD 之dispatch_group方面的开发
- iOS开发之浅谈GCD的使用
- ios开发之GCD基础(一)
- iOS开发之GCD(1)初探
- FZU Problem 2110 Star
- pgfincore introduces
- JQuery中SetTimeOut传参问题
- 开发者需知的10类工具
- Tmux安装配置
- IOS开发(61)之GCD执行非UI的操作
- HSQL安装与配置
- postgresql server configuration
- android使用命令行生成数字签名和apk
- SVN报错
- 一起学mini2440裸机开发(一)--第一个led灯点亮
- 数据库优化及找出最消耗资源的查询
- 那些年我们一起对篮球的记忆,文字控吧
- postgresql system columns