异步环境中的同步调用
Synchronous calls in an asynchronous environment
我正在使用 AFNetworking 2.0 和 Objective-C 创建一个 class,它将客户端数据库与服务器上的数据库同步。
当然,客户端不应该在发生这种情况时注意到,因此 class 必须使调用异步。
但是,此 class 中的某些调用取决于其他调用的结果。
示例:
- 对象:哺乳动物,id = 15,新 id = 26
- 子对象:斑马,clade_id = 15
斑马只能在哺乳动物完成后更新其属性,因为它使用了一些哺乳动物属性 (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];
在成功块中,您安排了第二个操作。
2)第二种方式
一次创建两个操作并设置第一个操作如何依赖于第二个操作(但需要额外的代码来管理共享数据)。
[operation2 addDependency:operation1];
[self.operationQueue addOperation:operation1];
[self.operationQueue addOperation:operation2];
我正在使用 AFNetworking 2.0 和 Objective-C 创建一个 class,它将客户端数据库与服务器上的数据库同步。 当然,客户端不应该在发生这种情况时注意到,因此 class 必须使调用异步。 但是,此 class 中的某些调用取决于其他调用的结果。
示例:
- 对象:哺乳动物,id = 15,新 id = 26
- 子对象:斑马,clade_id = 15
斑马只能在哺乳动物完成后更新其属性,因为它使用了一些哺乳动物属性 (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];
在成功块中,您安排了第二个操作。
2)第二种方式
一次创建两个操作并设置第一个操作如何依赖于第二个操作(但需要额外的代码来管理共享数据)。
[operation2 addDependency:operation1];
[self.operationQueue addOperation:operation1];
[self.operationQueue addOperation:operation2];