Почему мой NSOperationQueue не работает правильно в iOS 4.0? - PullRequest
0 голосов
/ 21 октября 2010

Ранее я использовал NSOperationQueue в своем приложении для iPhone в iPhone OS 3.0, но теперь в iOS 4.0 код не работает должным образом.Он работает правильно только один раз и на всех последующих вызовах, он не работает.Были ли изменения в NSOperationQueue в iOS 4.0?

Соответствующий код выглядит следующим образом:

   - (void) starteffectFunction {

        NSOperationQueue *queue = [NSOperationQueue new];
        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(starteffectProcessing)
                                                                                  object:nil];

        [queue addOperation:operation];
        [operation release];
        [queue release];
        [spinner startAnimating];
}

    -(void) starteffectProcessing{
    some code executes. code snippet. A 
    ......
    this code is note supposed to execute before A completes. But this executes before A.
    }

1 Ответ

2 голосов
/ 21 октября 2010

Вы создаете NSOperationQueue, добавляете к нему операцию, а затем освобождаете очередь.Это не то, как NSOperationQueues были разработаны для работы.Предполагается, что NSOperationQueue сохраняется, и вы добавляете к нему операции по мере необходимости.

Вероятно, это сбой, потому что вы освобождаете NSOperationQueue до того, как у него появится возможность запустить поток для вашей операции.Возможно, на более старых версиях ОС это было возможно сделать из-за некоторой временной привязки.

Я рекомендую выделять очередь обработки эффектов, когда она вам нужна, или при инициализации объекта контроллера, а затем сохранять этоочередь как переменная экземпляра вашего объекта контроллера.Эта очередь будет освобождена одновременно с вашим объектом контроллера, но вы, вероятно, захотите отменить все текущие операции в то время и использовать метод NSOperationQueue –waitUntilAllOperationsAreFinished, чтобы убедиться, что вы завершаете всю работу до освобождения.

...