В настоящее время я использую NSThread
для кэширования изображений в другом потоке.
[NSThread detachNewThreadSelector:@selector(cacheImage:) toTarget:self withObject:image];
В качестве альтернативы:
[self performSelectorInBackground:@selector(cacheImage:) withObject:image];
В качестве альтернативы я могу использовать NSOperationQueue
NSInvocationOperation *invOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(cacheImage:) object:image];
NSOperationQueue *opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:invOperation];
Есть ли причина отказаться от NSThread
? GCD - это четвертый вариант, когда он выпущен для iPhone, но если не будет значительного увеличения производительности, я бы предпочел придерживаться методов, которые работают на большинстве платформ.
Основываясь на совете @Jon-Eric, я пошел с подклассом NSOperationQueue
/NSOperation
. Он работает очень хорошо. Класс NSOperation
достаточно гибкий, чтобы вы могли использовать его с помощью вызовов, блоков или пользовательских подклассов в зависимости от ваших потребностей. Независимо от того, как вы создаете свой NSOperation
, вы можете просто бросить его в очередь операций, когда вы будете готовы его запустить. Операции предназначены для работы как с объектами, которые вы помещаете в очередь, так и при необходимости можете запускать их как автономные асинхронные методы. Поскольку вы можете легко запускать свои собственные методы работы синхронно, тестирование очень просто.
Я использовал эту же технику в нескольких проектах, так как я задал этот вопрос, и я не мог быть счастливее, так как мой код и мои тесты были чистыми, организованными и счастливо асинхронными.
а ++++++++++ Будет ли подкласс снова