У меня есть задача, которая занимает довольно много времени и должна выполняться в фоновом режиме. Согласно документации, это можно сделать с помощью файла NSOperationQueue
. Однако я не хочу хранить глобальную копию класса NSOperationQueue
, так как я действительно использую ее только для этой одной задачи. Следовательно, я просто установил для него автоматический выпуск и надеюсь, что он не будет выпущен до того, как задача будет выполнена. Это работает.
вот так:
NSInvocationOperation *theTask = [NSInvocationOperation alloc];
theTask = [theTask initWithTarget:self
selector:@selector(doTask:)
object:nil];
NSOperationQueue *operationQueue = [[NSOperationQueue new] autorelease];
[operationQueue addOperation:theTask];
[theTask release];
Хотя я как-то беспокоюсь. Это гарантированно работает? Или может быть operationQueue
в какой-то момент освободится и заберет с собой theTask
?
[NSOperationQueue new]
возвращает автоматически выпущенный объект, поэтому[[NSOperationQueue new] autorelease]
заставит вас дважды выпускать в одной и той же очереди и должен привести к сбою. Кроме того, всегда и всегда делайте[[Class alloc] init...]
вложенными. Никогда не разделяйтеalloc
иinit
. Вы избавите себя от головной боли. - person Johan Kool   schedule 23.03.2010[self performSelectorInBackground:@selector(doTask:) withObject:nil]
вариант. Или это должна быть NSOperation? - person Brandon Bodnar   schedule 23.03.2010