Безопасно ли ссылаться на экземпляр NSOperation и вызывать -isFinished? - PullRequest
1 голос
/ 20 сентября 2011

Я создаю NSOperation каждый раз, когда мое приложение запускается или уходит в отставку активно. Мне нужно поставить их в очередь с такими зависимостями, чтобы два никогда не выполнялись одновременно, а один за другим.

Безопасно ли это делать?

  • Держите строгую ссылку на объект NSOperation в App Delegate.
  • Когда приложение подает в отставку, просто проверьте, не имеет ли свойство hat значение nil.
  • Если это не ноль, проверить текущую NSOperation -isFinished.
  • Если он закончен, просто добавьте новый в очередь.
  • Если он еще не закончен, создайте новый и установите зависимость от запущенного, затем добавьте его в очередь.

Я немного обеспокоен проблемами с многопоточностью. В документации к -isFinished или -addDependency: методы не говорят, что их нельзя вызывать из основного потока. Так что я думаю, это нормально.

Редактировать: NSOperation выполняет некоторые операции с файловой системой в фоновом режиме.

1 Ответ

1 голос
/ 20 сентября 2011

Если вы хотите убедиться, что они не вызываются в одно и то же время, установите для параметра MaximumConcurrentOperationCount: в вашем NSOperationQueue значение 1.

- (void)setMaxConcurrentOperationCount:(NSInteger)count

Это предполагает, что вы помещаете обе ваши NSOperations в одну и ту же очередь.

В ответ на другие ваши вопросы.Я не уверен, что вы делаете, но да, если хотите, вы можете держать сильную ссылку на вашу NSOperation на AppDelegate, и вы можете проверить isFinished

...