IOS并发处理的同步和通信

本文介绍了iOS中三种主流的多线程编程技术:NSThread、Cocoa NSOperation 和 GCD,对比了它们各自的优缺点,并详细阐述了如何利用这些技术进行线程管理和通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://www.cocoachina.com/applenews/devnews/2014/0520/8485.html

简介
iOS有三种多线程编程的技术,分别是:
(一)NSThread 
(二)Cocoa NSOperation
(三)GCD(全称:Grand Central Dispatch)
 
这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。

三种方式的优缺点介绍:
NSThread:
优点:NSThread 比其他两个轻量级
缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销
Cocoa NSOperation
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
Cocoa operation 相关的类是 NSOperation ,NSOperationQueue。
NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。
创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
 
GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。

线程同步和线程通信
一、在使用NSThread时,自己管理线程的生命周期,使用以下三种方式来创建线程。
  1. - (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument 
  2. + (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument
  1. [Obj performSelectorInBackground:@selector(doSomething) withObject:nil]; 

当线程执行完后,需要通知其他线程执行结果。

(1)通知主线程更新UI,使用

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

(2)通知其他线程

  1. performSelector:onThread:withObject:waitUntilDone:  

在线程运行过程中,使用NSCondition或者NSLock来进行同步。

二、在使用NSOperation时,线程通信和同步跟NSThread一样。

      三、GCD

用GCD实现这个流程的操作比前面介绍的NSThread  NSOperation的方法都要简单。代码框架结构如下:
 
  1. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{   
  2.     // 耗时的操作   
  3.     dispatch_async(dispatch_get_main_queue(), ^{   
  4.         // 更新界面   
  5.     });   
  6. }); 
也就是说,线程通信(跟UI线程)是通过下面实现的
  1. dispatch_async(dispatch_get_main_queue(), ^{   
  2.         // 更新界面   
  3.     });



扩展阅读:
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值