お世話になります。
Objective-cで、NSURLSessionでの同期処理の仕方について質問させてください。
現状、同期処理を行うのにsemaphoを使っていますが、もっと良い方法があったらご教示いただければと思います。
(NSURLSessionDataTaskがあるのでasyncとかできないものかと思っております…)
下記が、現在実装しているコードとなります。
objective
1__block NSString* result = @""; 2dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 3dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 4 NSURL* url = [NSURL URLWithString:@"https://・・・"]; 5 NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration]; 6 NSURLSession* session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; 7 [[session dataTaskWithURL:url completionHandlere:^(NSData* _Nullable data, NSURLResponse* _Nullable response, NSError* _Nullable error) { 8 // ここで受け取るdataは文字列 9 result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 10 dispatch_semaphore_signal(semaphore); 11 } 12} 13dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 14// APIのレスポンスで受け取った値でアラートを出したりビュー遷移したりする 15if ([result isEqualToString・・・
以上、よろしくお願いいたします。
なぜ dispatch_async で囲っているのでしょうか?
念のために確認しますが、あくまで「同期処理」にしたいんですよね?もしかして「非同期処理」にしたいのでしょうか?
「同期処理」にしたい、であっています。「dispatch_async」については、dispatch_semaphore_waitを使うためにそうするものだという思い込みでした。間違っているならば修正したいのでご指摘をお願いいたします。
「NSURLSessionDataTaskがあるのでasyncとかできないものか」の意味が分からないのですが。(asyncって非同期ってことですけど)
C#で async~ await~ で同期できたなーというだけです…混乱を招いてしまいすみません…
あとは「非同期処理にする」くらいしか思い付きません‥。
回答1件
あなたの回答
tips
プレビュー