2014-10-21 1 views
2

webservice 호출을 보내고 위임을 통해 응답을 전달하는 클래스가 있습니다. 이제 view와 my webservice 클래스 사이에 캐싱 레이어를 추가하려고합니다. 이 새 클래스는 이전 호출의 콜백이 끝날 때까지 모든 호출이 지연되는 방식으로 호출을 직렬화해야합니다.웹 서비스 호출 및 콜백을 serialize

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

     // call webservice 
    }); 
} 

을 그리고 콜백 :

나는 GCD와 그것을 실현하기 위해 노력

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

    dispatch_group_leave(self.serviceGroup); 
} 

각 호출 및 dispatch_group_enterdispatch_group_leave과의 콜백 및 사용 이전 그룹에 대한 기다릴 그룹 아이디어 dispatch_group_notify.

그러나이 방법은 의도 한대로 작동하지 않습니다. 더 좋은 방법이 있나요?

UPDATE :
은 내가 성공하지 않고 생각할 수 dispatch_group_enter, dispatch_group_leave, dispatch_group_notifydispatch_group_async의 모든 조합을 시도했다.
나는 또한 NSOperationNSOperationQueue을 생각했지만, 제대로 이해한다면, 모든 웹 서비스 호출에 대해 별도의 클래스를 작성해야 할 것입니다.

내가 아직 생각하지 못한 다른 대안이 있습니까?

답변

1

를 사용하여 비슷한 문제가 있었다 그들.

각 요청마다 기본 NSBlockOperation을 사용할 수있는 NSOperation 하위 클래스를 만들지 않으려면 각 인스턴스에 블록을 제공하고 NSBlockOperation 인스턴스 간의 종속성을 추가하면 대상 직렬화가 제공됩니다.

희망이 도움이됩니다. 이 타사 프레임 워크를 포함하고`NSBlockOperation`를 사용하여 서브 클래스의 톤을 피할 수 없기 때문에

감사

+0

감사합니다! 나는 첫 번째 이상이 답변을 선택했다. – cLar

2

네트워킹 솔루션으로 MKNetworkKit을 사용할 수 있습니다. 이것은 후드에서 NSOperationQueue를 사용하고 NSOperation 종속성을 사용하여 요청/응답을 직렬화 할 수 있습니다. MKNetworkKit은 응답 캐싱도 지원하므로 캐싱 구현에도 도움이 될 수 있습니다.

MKNetworkKit 개요
http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/

사람이 실행하는 직렬화 및 NSOperationQueue을 보장하기 위해, 당신이 NSOperation을 사용하여 더 나을 거라고 생각 그들 사이의 종속성을 MKNetworkKit 및 GCD
MKNetworkKit and GCD dispatch_group_t