[多线程]NSOperation实例

距离放假还有1天,哇卡卡~~

本次资料内容为介绍 NSOperation 和 NSOperationQueue的使用。【仅供参考】

辅助资料:
https://developer.apple.com/library/ios/documentation/cocoa/Reference/NSOperation_class/Reference/Reference.html
https://developer.apple.com/library/ios/documentation/cocoa/Reference/NSBlockOperation_class/Reference/Reference.html
https://developer.apple.com/library/ios/documentation/cocoa/Reference/NSInvocationOperation_class/Reference/Reference.html
https://developer.apple.com/library/ios/documentation/cocoa/Reference/NSOperationQueue_class/Reference/Reference.html

关于NSOperation:
NSOperation是一个将代码和数据放在单任务中执行的抽象类。
由于是抽象类,没法直接使用,所以只能继承或使用它的子类:
NSInvocationOperation 和 NSBlockOperation ;

关于NSOperationQueue:
NSOperationQueue 为 NSOperation子类的对象 列队。
对象被添加到列队后,列队就会启动并开始处理它,直到被取消或者完成执行。
同时在列队中,可以设置对象的优先级。

创建 NSOperationQueue:
[objc]
NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
[/objc]

下面就开始进入多线程_>
一、添加代码块到 NSOperationQueue 中。
[objc]
NSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];
//将代码块,添加到接收器。
[oprationQueue addOperationWithBlock:^{
//以下代码将在子线程中执行
NSLog(@"oprationQueue example");
}];
[/objc]

二、添加 NSInvocationOperation 到 NSOperationQueue 中。
且我们将添加多个任务到队列,并且指定它的并发数。
[objc]
NSLog(@"Example NSOperationQueue");
NSOperationQueue *oprationQueue1 = [[NSOperationQueue alloc] init];
oprationQueue1.maxConcurrentOperationCount = 2;//设置最大并发数数

//NSInvocationOperation 为NSOperation的具体子类,是一个非并发操作。
NSInvocationOperation *invation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(action:) object:@"2.1"];
[oprationQueue1 addOperation:invation];//将任务添加到列队中

//第二个任务
NSInvocationOperation *invation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(action:) object:@"2.2"];
invation2.queuePriority = NSOperationQueuePriorityVeryHigh;//设置invation2线程优先级
[oprationQueue1 addOperation:invation2];
NSLog(@"/Example End\n\n");
[/objc]
打印出来结果:
[objc]
2014-01-27 10:57:52.900 test[10197:60b] Example NSOperationQueue
2014-01-27 10:57:52.905 test[10197:60b] /Example End

2014-01-27 10:57:52.906 test[10197:3807] Example = 2.2
2014-01-27 10:57:52.906 test[10197:1903] Example = 2.1
[/objc]
关于优先级别:
[objc]
typedef NS_ENUM(NSInteger, NSOperationQueuePriority) {
NSOperationQueuePriorityVeryLow = -8L, //极低的优先级
NSOperationQueuePriorityLow = -4L, //较低优先级
NSOperationQueuePriorityNormal = 0, //正常优先级
NSOperationQueuePriorityHigh = 4, //较高优先级
NSOperationQueuePriorityVeryHigh = 8 //极高优先级
};
[/objc]

三、添加 NSBlockOperation 到 NSOperationQueue 中。
[objc]
//NSBlockOperation 为 NSOperation的具体子类,可并发执行多个操作。
NSBlockOperation *block= [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"Example");}];
[oprationQueue1 addOperation:block];
[/objc]

107 thoughts on “[多线程]NSOperation实例

  1. 네이버 아이디 판매

    저희는 구글 계정 판매 전문 회사입니다.우리의 구글 계정은 이메일, 문서, 캘리더, 클라우드 저장 등의 기능을 포함한 포괄적인 디지털 솔루션을 제공합니다.구글 계정을 통해 우리는 사용자에게 효율적인 협업 플랫품을 제공하여 개인과 팀이 일과 삶을 더 스마트하게 관리할 수 있도록 지원합니다.

nba賽程进行回复 取消回复

电子邮件地址不会被公开。