ios - 异步环境中的同步调用

标签 ios objective-c asynchronous afnetworking-2 synchronous

我正在使用 AFNetworking 2.0 和 Objective-C 创建一个类,用于将客户端数据库与服务器上的数据库同步。 当然,当这种情况发生时,客户端不应该注意到,所以该类必须使调用异步。 但是,此类中的某些调用依赖于其他调用的结果。

示例:

  • 对象:哺乳动物,id = 15,新 id = 26
  • 子对象:斑马,clade_id = 15

zebra 只能在哺乳动物完成后更新其属性,因为它使用了一些哺乳动物属性 (id),如果过早发送调用,则会导致数据损坏(id = 15 而不是正确的 26) .

我的问题是,如何使用 AFNetworking 以用户不会注意到(异步)的方式进行这些同步调用(哺乳动物完成后的斑马线)。

感谢您的回答。

最佳答案

您不需要使用同步调用。

1)第一种方式

// create request with URL
NSMutableURLRequest *request = ....;

// create AFHTTPRequestOperation
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperationManager manager] HTTPRequestOperationWithRequest:request success:^{success block} failure:^{failure block}];

// Call operation
[self.operationQueue addOperation:operation];

在成功 block 中,您安排了第二个操作。

2)第二种方式
一次创建这两个操作并设置第一个操作如何依赖于第二个操作(但需要额外的代码来管理共享数据)。

[operation2 addDependency:operation1]; 
[self.operationQueue addOperation:operation1];
[self.operationQueue addOperation:operation2];

关于ios - 异步环境中的同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31051158/

相关文章:

multithreading - react 性声明 : non blocking code vs blocking code?

ios - 在旋转时更改 UITableViewCell 中的文本对齐方式

ios - 在 UITableViewCells 上显示 'Copy' 弹出窗口的简单方法,如地址簿 App

Objective-C线程

objective-c - 如何为 Mac App 创建辅助应用程序以在用户登录时启动它?

objective-c - 如何隐藏 iOS 模拟器?

javascript - 更新 React 状态数组中的 bool 值

c# - 有效锁定资源,由字符串标识

iphone - AFNetworking POST并取回数据

ios - 使用 NSUserDefaults Swift 存储数据