我采用了一堆代码,它使用 AFNetworking 进行 REST 调用。问题是所有这些调用都是以同步方式进行的。您最推荐哪种方式使 AFJSONOperation 从异步变为同步?
到目前为止,我已经看过基于 GCD 的示例,但我认为它并不简单,因为它不容易阅读。我会转而设置一些 NSOperation 对象来将它们纠缠在一起,直到响应被捕获。
我知道这个主题是有争议的,但我想探索这种思维方式。
我采用了一堆代码,它使用 AFNetworking 进行 REST 调用。问题是所有这些调用都是以同步方式进行的。您最推荐哪种方式使 AFJSONOperation 从异步变为同步?
到目前为止,我已经看过基于 GCD 的示例,但我认为它并不简单,因为它不容易阅读。我会转而设置一些 NSOperation 对象来将它们纠缠在一起,直到响应被捕获。
我知道这个主题是有争议的,但我想探索这种思维方式。
如果您要追求同步性,那么 NSOperations 与它的工具完全相反。NSOperationQueue 建立在 GCD 之上,只能以异步方式运行(事实上,这就是该类首先存在的原因)。您可以继承 NSOperationQueue 以提供某种程度的同步性,但它也必须通过 GCD。查看dispatch_sync()
and dispatch_barrier_sync()
,您可以使用它在 .-main
返回的队列上调用给定操作的方法dispatch_get_current_queue()
。
但是所有这些对于解决竞争条件来说太过分了。相反,查看相关操作,甚至保持异步性,但使用串行队列来保持执行顺序。