//NSOperation 简单使用
self.myQueue = [[NSOperationQueue alloc] init];
- (void)demo
{
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"下载 %@", [NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"修改 %@", [NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"保存 %@", [NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"更新UI %@", [NSThread currentThread]);
}];
// 设定执行顺序, Dependency依赖,可能会开多个,但不会太多
// 依赖关系是可以跨队列的!
[op2 addDependency:op1];
[op3 addDependency:op2];
[op4 addDependency:op3];
// GCD是串行队列,异步任务,只会开一个线程
[self.myQueue addOperation:op1];
[self.myQueue addOperation:op2];
[self.myQueue addOperation:op3];
// 所有UI的更新需要在主线程上进行
[[NSOperationQueue mainQueue] addOperation:op4];
// 同时运行两个线程
<pre name="code" class="objc"> // 例如:
// 如果是3G,开3个子线程 // 如果是WIFI,开6个子线程// self.myQueue.maxConcurrentOperationCount = 2; [self.myQueue addOperationWithBlock:^{ NSLog(@"%@ %d", [NSThread currentThread], i); }];}
// 如果是3G,开3个子线程