IOS之NSOperationQueue

一个NSOperation对象可以通过start方法来执行任务,默认是同步执行的,可以将NSOperation加入到一个NSOperationQueue中去异步执行。

创建操作队列:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

添加NSOperation到NSOperationQueue中:

1.添加一个NSOperation

[queue addOperation:operation];

2.添加一组NSOperation

[queue addOperations:operations waitUtilFinished:NO];

3.添加一个Block形式的operation

[queue addOperationWithBlock:^(){
        NSLog(@"当前线程%@", [NSThread currentThread]);
}];

NSOperation被加到一个Queue中后,短时间内就会得到执行,但如果存在依赖,或者整个Queue被暂停等原因,也可能需要等待。

NSOperation被加到Queue中后,绝对不要再修改NSOperation的状态,因为NSOperation对象可能在任何时候被执行。只能查看NSOperation对象的状态。

添加和删除NSOperation的依赖对象

addDependency与removeDependency方法

只有所有依赖对象都执行完了,当前对象才会被执行。

依赖关系不仅限于相同Queue中的NSOperation对象,可以在不同的Queue中的NSOperation创建依赖关系。唯一的限制是不能创建环形的依赖关系。

依赖关系可以修改Operations的执行顺序,也可以使用setQueuePriority:来设置优先级,但影响次于依赖。

通过设置NSOperationQueue的maxConcurrentOperationCount属性来设置队列的最大并发数。

通过NSOperation的cancel方法来取消单个,通过NSOperationQueue的cancelAllOperations来取消全部。

通过修改NSOperationQueue的suspended属性来暂停和继续队列。

时间: 2024-08-03 15:10:35

IOS之NSOperationQueue的相关文章

iOS 多线程(NSOperationQueue)

1.就基本使用 NSInvocationOperation //1.创建操作对象,封装需要执行的任务 NSInvocationOperation * operation =[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download) object:nil]; //2.执行操作(默认情况下,如果操作没有放到队列queue中,都是同步执行) [operation start]; - (void)downl

一周技术文章汇总 - 20161021

iOS NSOperation, NSOperationQueue原理探析 iOS下OC与JS的交互(WKWebview-MessageHandler实现) iOS10推送必看UNNotificationServiceExtension iOS 如何实现Aspect Oriented Programming 那些著名或非著名的iOS面试题 - 前篇 那些著名或非著名的iOS面试题 - 中篇 那些著名或非著名的iOS面试题 - 后篇 Android Android业务组件化开发实践 深入了解 Me

IOS中的多线程【二】— NSOperation和NSOperationQueue

NSOperationQueue是一套基于Objective-c语言的API. GCD与NSOperationQueue的优缺点: NSOperationQueue:比较安全 GCD:没有NSOperationQueue安全,但使用起来简单,快速,还提供了一些操控底层的方法.实际开发中还是以GCD为主. NSOperationQueue实现多线程流程 1.定义一个任务队列. 2.定义一个任务. 3.把任务添加到队列中.一旦任务被添加到队列中,任务会马上被调度执行. 任务队列(NSOperatio

IOS 多线程02-pthread 、 NSThread 、GCD 、NSOperationQueue、NSRunLoop

注:本人是翻译过来,并且加上本人的一点见解. 要点: 1.前言 2.pthread 3.NSThread 4.Grand Central Dispatch(GCD) 5.Opearation Queues 6. Run Loops 7. 多线程编程中面临的挑战 8. 资源共享 9. 互斥锁 10. 死锁 11. 资源饥饿(Starvation) 12. 优先级反转 1. 前言 其实把RunLoop叫做多线程不正确,因为它不能真正的并行,不过因为它与并发编程有莫大关系,所以值得我们深入了解. 2.

iOS多线程 NSThread/GCD/NSOperationQueue

http://www.cnblogs.com/kenshincui/p/3983982.html iOS开发系列--并行开发其实很容易 2014-09-20 23:34 by KenshinCui, 9738 阅读, 19 评论, 收藏,  编辑 --多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行.改变这种

IOS多线程--NSOperation\NSOperationQueue

iOS中,有多种多线程方式,但是,苹果公司建议我们用NSOperation技术 1.GCD是纯C的,对面向对象的程序员不友好 2.GCD对编程管理还不是很强大 NSOperation 其实底层实现是基于GCD来做的 dispatch_queue_t ==  NSOperationQueue dispatch_async == NSOperation dispatch_sync  == NSOperation NSOperation是个抽象类 使用它的两个子类 NSInvocationOperat

iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)

转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也熟悉Java,NSOperation就和java.lang.Runnable接口很相似.和Java的Runnable一样,NSOperation也是设计用来扩展的,只需继承重写NSOperation的一个方法main.相当与ja

iOS开发-多线程NSOperation和NSOperationQueue

上一篇文章稍微提及了一下NSThread的使用,NSThread能直观地控制线程对象,不过需要自己管理线程的生命周期,线程同步,用起来比较繁琐,而且比较容易出错.不过Apple给出了自己的解决方案NSOperation,它本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有NSInvocationOperation和NSBlockOperation两种方式,先补充一下NSThread的用法: NSThread获取当前线程: [NSThread currentThread]

iOS多线程之NSThread、NSOperationQueue、NSObject和GCD的区别

区别: Thread: 是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限.你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销.在 iOS 中我们可以使用多种形式的 thread. Cocoa threads(NSObject): 使用 NSThread 或直接从 NSObject 的类方法 performSelectorInBackgrou