引用NSOperation实例并调用-isFinished是否安全?

时间:2011-09-20 13:55:26

标签: iphone ios ipad nsoperation nsoperationqueue

每次我的应用启动或重新启动时,我都会创建一个NSOperation。我需要用依赖关系对它们进行排队,这样两个永远不会同时执行,而是一个接一个地执行。

这样做是否安全?

  • 在App Delegate中保留对NSOperation对象的强引用。
  • 当应用程序重新启动时,只需检查hat属性是否为零。
  • 如果不是nil,请检查当前的NSOperation -isFinished
  • 如果已完成,只需将新的一个添加到队列中。
  • 如果尚未完成,请创建新的并依赖于正在运行的依赖关系,然后将其添加到队列中。

我在这里关注多线程问题。 -isFinished或-addDependency:方法的文档并未说明不应从主线程调用它们。所以我想这样做是可以的。

编辑:NSOperation在后台执行一些文件系统操作。

1 个答案:

答案 0 :(得分:1)

如果您想确保不会同时调用它们,请将NSOperationQueue上的maximumConcurrentOperationCount:设置为1.

- (void)setMaxConcurrentOperationCount:(NSInteger)count

这假设您将两个NSOperations放在同一个队列中。

回答您的其他问题。我不确定你在做什么 - 但是如果你愿意,你可以坚持在AppDelegate上强烈引用你的NSOperation,你可以检查isFinished