NSOperationQueue和GCD的区别】的更多相关文章

使用NSOperationQueue用来管理子类化的NSOperation对象,控制其线程并发数目.GCD和NSOperation都可以实现对线程的管理,区别是 NSOperation和NSOperationQueue是多线程的面向对象抽象.项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation的设计思路,是具有面向对象的优点(复用.封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用. 项…
1> GCD是纯C语言的API .NSOperationQueue是基于GCD的OC的封装. 2> GCD只支持FIFO队列,NSOperationQueue可以方便设置执行顺序,设置最大的并发数量. 3> NSOperationQueue可是方便的设置operation之间的依赖关系,GCD则需要很多代码. 4> NSOperationQueue支持KVO,可以检测operation是否正在执行(isExecuted),是否结束(isFinished),是否取消(isCancel…
首先,我们要明确NSOperationQueue与GCD之间的关系: NSOpertaionQueue用GCD构建封装的,是GCD的高级抽象. 其次,我们要区别两者的不同: GCD仅仅支持FIFO队列,而NSOperationQueue中的队列可以被重新设置优先级,从而实现不同操作的执行顺序调整. GCD不支持异步操作之间的依赖关系设置.如果某个操作的依赖另一个操作的数据(生产者-消费者模型是其中之一),使用NSOperationQueue能够按照正确的顺序执行操作.GCD则没有内建的依赖关系支…
区别: Thread: 是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限.你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销.在 iOS 中我们可以使用多种形式的 thread. Cocoa threads(NSObject): 使用 NSThread 或直接从 NSObject 的类方法 performSelectorInBackgrou…
原文链接:http://www.jianshu.com/p/d09e2638eb27 GCD 技术是一个轻量的,底层实现隐藏的神奇技术,我们能够通过GCD和block轻松实现多线程编程,有时候,GCD相比其他系统提供的多线程方法更加有效,当然,有时候GCD不是最佳选择,另一个多线程编程的技术 NSOprationQueue 让我们能够将后台线程以队列方式依序执行,并提供更多操作的入口,这和 GCD 的实现有些类似. 这种类似不是一个巧合,在早期,MacOX 与 iOS 的程序都普遍采用Opera…
一.#import 和 #include 的区别,@class代表什么?@class 和 #import 的区别?#import<> 和 #import""的区别 答:使用上的区别: 1>.@class 方式一般用在头文件中需要声明该类的某个实例变量的时候用到,在 .m 文件中还需要使用#import; 2>.使用@class方式由于只需要被引用类的名称就行了,而在实现类中由于要使用被引用类中的实例变量和方法,所以需要使用#import来包含被引用类的头文件.…
```objc1 使用Crearte函数创建的并发队列和全局并发队列的主要区别: 1)全局并发队列在整个应用程序中本身是默认存在的并且对应有高优先级.默认优先级.低优先级和后台优先级一共四个并发队列,我们只是选择其中的一个直接拿来用.而Create函数是实打实的从头开始去创建一个队列. 2)在iOS6.0之前,在GCD中凡是使用了带Create和retain的函数在最后都需要做一次release操作.而主队列和全局并发队列不需要我们手动release.当然了,在iOS6.0之后GCD已经被纳入到…
NSInvocationOperation // 基于一个对象和selector来创建操作.如果你已经有现有的方法来执行需要的任务,就可以使用这个类 NSInvocationOperation * op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downImage) object:nil];        // 如果我们想在一个NSOperation执行完毕后做一些事情,就调用NSOperati…
//NSObject //在子线程中执行代码 // 参数1: 执行的方法 (最多有一个参数,没有返回值) //参数2: 传递给方法的参数 [self performSelectorInBackground:@selector(cycling:) withObject:@"obj1"]; // 回到主线程更新页面 [self performSelectorOnMainThread:@selector(updateUI:) withObject:nil waitUntilDone:YES]…
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不阻塞主线程,简直完美. 在某些场合,我们还见过另一个“高深”的名词——“异步”.这东西好像和多线程挺类似,经过一番百度(阅读了很多质量层次不齐的文章)之后,很多人也没能真正搞懂何为“异步”. 于是,带着对“多线程”和“异步”的懵懂,很多人又开开心心踏上了多线程编程之旅,比如文章待会儿会提到的GCD.…