Я пытаюсь загрузить несколько изображений с некоторого сервера, используя NSOperation и NSOperationQueue. Мой главный вопрос заключается в том, какая разница между фрагментом кода ниже, и эта ссылка http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/, производительность мудрая? Я предпочитаю второе решение, потому что у нас намного больше контроля над операциями, он намного чище, и если соединение не удается, вы можете справиться с ним должным образом.
Если я попытаюсь загрузить около 300 изображений с сервера с приведенным ниже кодом, у моего приложения будет довольно большая задержка, и если я запустил приложение и сразу же перейду на главный экран, вернитесь в приложение, Я потерплю крах, потому что не было достаточно времени, чтобы приложение снова активировалось. Если я раскомментирую [queue setMaxConcurrentOperationCount: 1], пользовательский интерфейс реагирует, и он не будет сбой, если он войдет в фоновый режим и вернется на передний план.
Но если я реализую нечто похожее на ссылку выше, мне не нужно беспокоиться о настройке maxConcurrentOperationCount, значение по умолчанию - это нормально. Все отзывчиво, без сбоев, и кажется, что все очереди быстрее завершаются.
Итак, это подводит меня к моему второму вопросу, почему [queue setMaxConcurrentOperationCount: 1] имеет такое большое влияние в моем коде ниже? Из документации я думал, что оставить maxConcurrentOperationCount по умолчанию по умолчанию, и это просто говорит очереди определить, какое наилучшее значение должно быть основано на определенных факторах.
Это мой первый пост в Stack Overflow, поэтому, надеюсь, это имеет смысл, спасибо за любую помощь!
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//[queue setMaxConcurrentOperationCount:1];
for(NSURL *URL in URLArray) {
[queue addOperationWithBlock:^{
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData * data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:&response error:&error];
if(!error && data) {
[data writeToFile:path atomically:YES];
}
}];
}