您的位置:首页 > 移动开发 > IOS开发

iOS 多线程的使用(Operation)

2015-10-02 16:04 417 查看
#import "ViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

不能直接Operation是因为它里面没有直接操作的方法
只是一个基类 (抽象类)
NSInvocationOperation *invocation0 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation0"];
如果单独使用Operation
必须手动启动
[invocation start];

Operation是在当前线程去执行(同步执行)
NSInvocationOperation *invocation1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation1"];

NSInvocationOperation *invocation2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation2"];

NSInvocationOperation *invocation3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation3"];

NSInvocationOperation *invocation4 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(act:) object:@"invocation4"];

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
具体执行的方法
任务
[self act:@"blockOperation"];
}];

添加操作
NSBlockOperation
的操作数大于1
的时候 会开辟线程去执行
[blockOperation addExecutionBlock:^{
[self act:@"blockOperation2"];
}];
[blockOperation start];
operation
默认在当期线程去执行
(同步执行)

可以使用线程队列NSOperationQueue去管理线程 (默认会开辟线程去执行)
异步执行 不用手动去启动线程
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
可以线程队列的最大并发数(最多允许多少操作同时执行)
queue.maxConcurrentOperationCount = 3;
设置Operation的依赖关系
[invocation1 addDependency:invocation0];
[invocation2 addDependency:invocation1];
[invocation3 addDependency:invocation2];
[invocation4 addDependency:invocation3];
[blockOperation addDependency:invocation4];

[queue addOperation:invocation0];
[queue addOperation:invocation1];
[queue addOperation:invocation2];
[queue addOperation:invocation3];
[queue addOperation:invocation4];
[queue addOperation:blockOperation];
}
- (void)act:(id)sender
{
NSLog(@"%@%@",[NSThread currentThread],sender);
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: