我有一个发送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_enter
和dispatch_group_leave
对每个来电及其回调进行分组的想法,并使用dispatch_group_notify
等待之前的群组。
然而,这种方法似乎并不像我预期的那样有效。 有没有更好的方法来实现这一目标?
更新
我尝试了dispatch_group_enter
,dispatch_group_leave
,dispatch_group_notify
和dispatch_group_async
的所有组合,但我没有成功。
我还考虑过NSOperation
和NSOperationQueue
,但是 - 如果我理解正确的话 - 这将迫使我为每个webservice调用编写一个单独的类。
还有其他我没有想到的选择吗?
答案 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实例之间添加依赖关系应该为您提供目标序列化。
希望这有帮助。
此致