序列化Web服务调用和回调

时间:2014-10-21 15:04:54

标签: ios web-services serial-processing

我有一个发送webservice调用的类,并通过委托传递响应。 我现在想在视图和我的webservice类之间添加一个缓存层。 这个新类应该以每个呼叫被延迟的方式序列化呼叫,直到前一个呼叫的回叫结束。

我试图通过GCD意识到这一点:

- (void)callWebserviceFunctionX {
    dispatch_group_notify(self.serviceGroup, self.serialQueue, ^{
        dispatch_group_enter(self.serviceGroup);

        // call webservice
    });
}

在回调中:

-(void)callbackFunctionXWithResponse:(id)response {
    // do something

    dispatch_group_leave(self.serviceGroup);
}

使用dispatch_group_enterdispatch_group_leave对每个来电及其回调进行分组的想法,并使用dispatch_group_notify等待之前的群组。

然而,这种方法似乎并不像我预期的那样有效。 有没有更好的方法来实现这一目标?

更新
我尝试了dispatch_group_enterdispatch_group_leavedispatch_group_notifydispatch_group_async的所有组合,但我没有成功。 我还考虑过NSOperationNSOperationQueue,但是 - 如果我理解正确的话 - 这将迫使我为每个webservice调用编写一个单独的类。

还有其他我没有想到的选择吗?

2 个答案:

答案 0 :(得分:2)

您可以使用MKNetworkKit作为您的网络解决方案。这使用了NSOperationQueue,您可以使用NSOperation依赖项来序列化您的请求/响应。 MKNetworkKit还支持缓存响应,因此也可能有助于缓存实现。

MKNetworkKit概述
http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/

使用MKNetworkKit和GCD的人有类似的问题 MKNetworkKit and GCD dispatch_group_t

答案 1 :(得分:2)

我认为您最好使用NSOperation,它们之间的依赖关系以确保序列化和NSOperationQueue运行它们。

为了避免为每个请求创建一个NSOperation子类,您可以使用内置的NSBlockOperation,为每个实例提供一个块,并在NSBlockOperation实例之间添加依赖关系应该为您提供目标序列化。

希望这有帮助。

此致