NSThread:
优点:NSThread 比其他两个轻量级,使用简单
缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销
NSOperation:
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上
缺点:面向对象的抽象类,只能实现它或者使用它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。
GCD(Grand Central Dispatch):
优点:GCD是由苹果开发的一个多核编程的解决方案。iOS4.0+才能使用,是替代NSThread, NSOperation的高效和强大的技术。最高效,避开并发陷阱。
缺点:GCD是基于C语言的
NSOperation和GCD的区别
-
GCD
底层使用C语言编写高效、NSOperation是对GCD的面向对象的封装。对于特殊需求,如取消任务、设置任务优先级、任务状态监听,NSOperation使用起来更加方便。 -
NSOperation
可以设置依赖关系,而GCD只能通过dispatch_barrier_async实现 -
NSOperation
可以通过KVO观察当前operation执行状态(执行/取消) -
NSOperation
可以设置自身优先级(queuePriority)。GCD只能设置队列优先级(DISPATCH_QUEUE_PRIORITY_DEFAULT),无法在执行的block中设置优先级 -
NSOperation
可以自定义operation如NSInvationOperation/NSBlockOperation,而GCD执行任务可以自定义封装但没有那么高的代码复用度
-GCD
高效,NSOperation
开销相对高
网友评论