Как я понимаю, методы с именем *WithContentsOfURL:
, такие как [NSData dataWithContentsOfURL:]
, являются синхронными.
Так что, если я хочу загружать с 3 URL-адресов асинхронно, используя *WithContentsOfURL:
методы, я должен поместить их в GCD-рассылку, например:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *dataOne = [NSData dataWithContentsOfURL:dataOne];
NSData *dataTwo = [NSData dataWithContentsOfURL:dataTwo];
NSData *dataThree = [NSData dataWithContentsOfURL:dataThree];
});
Использует ли NSURLConnection
GCD
"за кадром"? Будет ли это (в некоторой степени) эквивалентно приведенным ниже методам с точки зрения асинхронной загрузки:
NSURLRequest *myRequestOne = [NSURLRequest requestWithURL:[NSURL URLWithString:URLOne] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *myConnectionOne = [[NSURLConnection alloc] initWithRequest:myRequestOne delegate:self];
NSURLRequest *myRequestTwo = [NSURLRequest requestWithURL:[NSURL URLWithString:URLTwo] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *myConnectionThree = [[NSURLConnection alloc] initWithRequest:myRequestTwo delegate:self];
NSURLRequest *myRequestThree = [NSURLRequest requestWithURL:[NSURL URLWithString:URLThree] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *myConnectionThree = [[NSURLConnection alloc] initWithRequest:myRequestThree delegate:self];
Также, что случилось бы, если бы я поместил NSURLConnection
внутрь dispatch_async
?