如何将NSOperation类子类化以使其在IOS中并发?

时间:2015-11-18 15:47:14

标签: ios concurrency nsoperation

我希望将NSOperation子类化为使其并发,根据Apple文档,我必须覆盖以下方法来实现并发操作:

  1. 启动
  2. isExecuting
  3. isFinished
  4. isAsynchronous
  5. 但是根据我的测试结果,我可以让NSOperation对象在第二个线程中运行而不实现“isExecuting”,“isFinished”和“isAsynchronous”方法。我只是编写代码。

    [NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
    

    在start方法中,然后在主线程中执行

    [myOperation start]
    

    然后该操作可以在第二个线程而不是主线程中执行。有人可以解释这个phe

2 个答案:

答案 0 :(得分:0)

您使用的解决方案今天会被视为糟糕。

要么你需要NSOperation必须提供的优势 - 你只是把所有这些抛出窗外。祝好运。或者你需要NSOperation的优势,那么请了解GCD和阻止和dispatch_async,让你的生活更轻松十倍。

答案 1 :(得分:0)

同意@ gnasher729。如果您只想启动异步方法,请不要使用NSOperation。 GCD和块将更容易。

回到为什么除了isExecuting之外你必须实施isFinishedisAsynchronousstart,因为 NSOperation会对状态做额外的工作,优先级和依赖关系管理

例如,您可能希望在离开视图时取消异步操作。 NSOperation中cancel方法的默认实现取决于操作状态。如果操作不在队列中,它将立即完成;如果它已在队列中但尚未启动,则其isCancelledisReady将设置为YES,并等待队列调用其start方法。 start方法将检查isCancelled属性的值;如果是,则立即完成。