iphone多线程编程GCD

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 22:15 点击:

iphone开发过程中,如果遇到加载大数据或者涉及到网络通信情况时,就需要在后台线程来完成这些事情。

除了NSThread之外,iphone还提供了一套GCD机制帮助开发者来实现多线程开发。

同NSThread相比,GCD的运行效率更高,开发更简单。

GCD的基础是dispatch queue和block。

 

1. block可以简单理解为一个任务。block在程序中的表现形式类似: 

1 NSString * URL = @"......";

2

3 ^{

4

5     UIImage * image = [UIImage imageWithURL:URL];

6

7 };

从上例可以看出,block可以引用外部作用域的数据。这也是很block和普通函数的区别,block会保存当前执行的上下文。

 

2. dispatch queue是一个FIFO任务队列,可以将一些block压入这个队列中,系统会按照顺序来执行这些block。

dispatch_async()

系统中默认提供了三种dispatch queue:

a. Main. 如果某个block希望在主线程完成,可以将其push到main dispatch queue中。

b. Concurrent. 系统会自动创建三个不同优先级的dispatch queue。不能保证block严格按照顺序执行。

c. Serial. 需要用户手动创建,能够保证block严格按照push的顺序执行。

 

下面是一段异步加载网络图像的例子:

 1 UIImageView * imageView = [[UIImageView alloc] init];

 2

 3   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

 4

 5     UIImage * image = ;//网络拉取代码

 6

 7     dispatch_async(dispatch_get_main_queue (), ^{

 8

 9       imageView.image = image; // 在主线程中更新imageview

10

11     });

12

13   });

从以上代码可以看出,GCD的前后台线程同步通知机制要比NSThread优雅和方便很多。

 

apple官方文档请参考:

http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

其他资料:

  http://www.2cto.com/kf/201111/112639.html

 

作者 dongliqian

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Lexical or Preprocessor Issue 'xxx.h
      • ios学习笔记(二)xcode 4.3.2下实现基本交互
      • ios版本的helloworld
      • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
      • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
      • IOS类似iphone通讯录TableView的完整demo【附源码】
      • UITableView一些方法
      • [iPhone中级]iPhone团购信息客户端的开发 (二)
      • iphone(object-c)内存管理(1)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1