我希望将NSOperation子类化为使其并发,根据Apple文档,我必须覆盖以下方法来实现并发操作:
但是根据我的测试结果,我可以让NSOperation对象在第二个线程中运行而不实现“isExecuting”,“isFinished”和“isAsynchronous”方法。我只是编写代码。
[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
在start方法中,然后在主线程中执行
[myOperation start]
然后该操作可以在第二个线程而不是主线程中执行。有人可以解释这个phe
答案 0 :(得分:0)
您使用的解决方案今天会被视为糟糕。
要么你需要NSOperation必须提供的优势 - 你只是把所有这些抛出窗外。祝好运。或者你不需要NSOperation的优势,那么请了解GCD和阻止和dispatch_async,让你的生活更轻松十倍。
答案 1 :(得分:0)
同意@ gnasher729。如果您只想启动异步方法,请不要使用NSOperation。 GCD和块将更容易。
回到为什么除了isExecuting
之外你必须实施isFinished
,isAsynchronous
,start
,因为 NSOperation会对状态做额外的工作,优先级和依赖关系管理。
例如,您可能希望在离开视图时取消异步操作。 NSOperation中cancel
方法的默认实现取决于操作状态。如果操作不在队列中,它将立即完成;如果它已在队列中但尚未启动,则其isCancelled
和isReady
将设置为YES,并等待队列调用其start
方法。 start
方法将检查isCancelled
属性的值;如果是,则立即完成。