您的位置:首页 > 其它

多线程

2016-04-13 18:10 288 查看
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{

});
dispatch_group_async(group, queue, ^{

});
dispatch_group_notify(group, queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{

});
});
});


//串行队列
dispatch_queue_t serialQueue = dispatch_queue_create("myThreadQueue1", DISPATCH_QUEUE_SERIAL);
//并发队列
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (int i = 0; i < count; ++i) {
//        异步加载
dispatch_async(serialQueue, ^{
[self loadImage:[NSNumber numberWithInt:i]];
});
//        同步加载
dispatch_sync(serialQueue, ^{
[self loadImage:[NSNumber numberWithInt:i]];
});
}

dispatch_barrier_async(globalQueue, ^{
[self loadImage:[NSNumber numberWithInt:count - 1]];
});
for (int i = 0; i < count - 1; ++i) {
dispatch_async(globalQueue, ^{
[self loadImage:[NSNumber numberWithInt:i]];
});
}


dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
[self updateImage:imageData];
});

dispatch_async(mainQueue, ^{
[self updateImage:imageData];
});


1、Thread
for (int i = 0; i < ROW_COUNT * COLUMN_COUNT; ++i) {
[NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:[NSNumber numberWithInt:i]];
NSThread * thread=[[NSThread alloc] initWithTarget:self selector:@selector(loadImage:) object:[NSNumber numberWithInt:i]];
thread.name=[NSString stringWithFormat:@"myThread%i",i];
[thread start];
}

[self performSelectorOnMainThread:@selector(updateImage:) withObject:imageData waitUntilDone:YES];
[self performSelectorInBackground:@selector(updateImage:) withObject:imageData];


NSOperationQueue * operationQueue = [[NSOperationQueue alloc] init];
operationQueue.maxConcurrentOperationCount = 5;
for (int i = 0; i < count; ++i) {
[operationQueue addOperationWithBlock:^{
[self loadImage:[NSNumber numberWithInt:i]];
}];
}

依赖关系
NSBlockOperation * lastBlockOperation= [NSBlockOperation blockOperationWithBlock:^{
[self loadImage:[NSNumber numberWithInt:(count - 1)]];
}];
for (int i = 0; i < count - 1; ++i) {
NSBlockOperation * blockOperation = [NSBlockOperation blockOperationWithBlock:^{
[self loadImage:[NSNumber numberWithInt:i]];
}];
[blockOperation addDependency:lastBlockOperation];
[operationQueue addOperation:blockOperation];
}

[operationQueue addOperation:lastBlockOperation];

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[self updateImage:imageData];
}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: