直列GCD知識点
3188 ワード
直列GCD知識点
dispatch_queue_t
//queue dispatch_queue_create(const char * label, dispatch_queque_attr_t attr)
//シリアル(DISPATCH_QUEUE_SERIAL、1つのキュー、1つのスレッドに割り当てる)または同時queue(DISPATCH_QUEUE_CONCURRENT、1つのキュー、いくつかのスレッドに割り当てる)dispatch_async(dispatch_queue_t queue, dispatch_block_t block)
同期実行:dispatch_sync(dispatch_queue_t queue, dispatch_block_t block)
//main dispatch queue
//プライマリ・キューは1つしかありません.すべてのタスクはプライマリ・スレッドでdispatch_get_global_queue(long identifier, unsigned long flags)
//GCDのデフォルトで提供されているグローバル同時キューを使用します.最初のパラメータは優先度で、2番目のパラメータはタグを付けて、将来の使用に使用します.多くの場合、0 serial queue
の特性を使用して、リソースのスレッドセキュリティを保証する.ロックunlockよりも安全で、パフォーマンスがより良く、より明確です.dispatch_semaphore_t
//声明dispatch_semaphore_create(long value)
//作成dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout)
//待ち信号量--(駐車場に入る)dispatch_semaphore_signal(dispatch_semaphore_t dsema)
//トリガ信号量+(駐車場を離れる)dispatch_semaphore_create(1)
//ロックdispatch_semaphore_create(0)
//非同期スレッドで優先順位を制御するために使用される例は、次のとおりです:dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
NSLog(@"dispatch queue task");
dispatch_semaphore_signal(semaphore);
});
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"wait for dispatch queue task completed");
dispatch_group_t
//group dispatch_group_create(void)
//group dispatch_group_async(group,queue,block)
//タスク設定group dispatch_group_wait(group, timeout)
//groupのすべてのタスクが完了するのを待っています.サンプルコード: self.upImageView.image = nil;
self.downImageView.image = nil;
__block UIImage *upImage = nil;
__block UIImage *downImage = nil;
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
NSURL *url = [NSURL URLWithString:@"http://d.hiphotos.baidu.com/image/h%3D300/sign=e1455acbde3f8794ccff4e2ee21b0ead/728da9773912b31bc351745a8c18367adab4e180.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
upImage = [UIImage imageWithData:data];
sleep(1);
});
dispatch_group_async(group, dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{
NSURL *url = [NSURL URLWithString:@"http://c.hiphotos.baidu.com/image/h%3D300/sign=f7cc32133001213fd03348dc64e536f8/fc1f4134970a304e5fc3a630d8c8a786c8175c12.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
downImage = [UIImage imageWithData:data];
});
dispatch_async(dispatch_get_main_queue(), ^{
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
self.upImageView.image = upImage;
self.downImageView.image = downImage;
});