Я не уверен, что видел четкий ответ на этот вопрос. Я знаю, как использовать блоки и обработчики завершения, однако для этого я не могу их использовать, и мне нужно вызывать метод синхронно:
- (void)codePathWithURL:(NSURLRequest *)request {
// Create session
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.URLCache = nil;
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:config delegate:nil delegateQueue:nil];
// Using semaphores
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
NSURLSessionDataTask *sessionTask = [urlSession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
responseData = data;
httpResponse = (NSHTTPURLResponse *)response;
outError = error;
dispatch_semaphore_signal(semaphore);
}];
[sessionTask resume];
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
// do something with data
}
Проблема, которую я вижу здесь, - это блокировка основного потока. Как мне сделать так, чтобы основной поток не блокировался?