2012-01-28 4 views
0

내 응용 프로그램에서 ASIHTTPRequest를 비동기 요청 전용으로 사용하고 있습니다. 일부 메서드는 비동기 메서드의 복합 메서드입니다. 예를 들어, 어떤 방법 + (공극) 때문에 updateData 보면, 그것은비동기 및 콜백 이해 및 명명 규칙

  • [X downloadData1] 느릅 나무 비동기
  • [Y는 downloadData2] 느릅 비동기이다 호출
  • ...

비동기/콜백 메카니즘으로 인해 updateData 메소드가 (동기 컨텍스트에서 단 하나의 메소드 대신) 분할됩니다.

-(void) updateData { 
    ... // Some work 
    x.callback = @selector(updateData1); 
    [x downloadData1]; 
} 


-(void) updateData1 { 
    ... // Some work 
    y.callback = @selector(updateData2); 
    [x downloadData2]; 
} 

... 

- (void) updateDataN { 
    ... // Some work 
    // Need to callback my own "delegate" 
    [self.target performSelector:callback ...]; 
} 

따라서 updateData도 비동기입니다.

이 코드는 내 프로젝트에서 온 것이 아니며 간단한 예제를 묘사하려고했습니다. 하지만 복합 통화의 조건부 호출과 복합체가있을 수 있습니다.

여기 코드가 거의 읽히지 않습니다. 실행 흐름을 따라 가기가 어렵습니다. 메소드가 비동기 (-Async suffix?)인지 또는 콜백인지 여부를 알리는 것이 좋은 연습 또는 명명 규칙은 무엇입니까? 접미사가 추한 번호로되어 있고 비선형 흐름에는 적합하지 않습니다.

어떤 것이 좋습니다? 그리고 무엇을 가로 질러 왔습니까? 혹시 그게 좋지 않은 설계 코드로 인한 결과라고 생각하십니까?

+0

더 많은 모듈 요청을 만들기 위해 NSOperation과 같은 것을 사용하셨습니까? 하나의 클래스에 모든 것을 덤프하면 엉망이 될 수 있지만, 다른 클래스의 각 요청을 분리하면 훨씬 쉽게 읽을 수 있습니다. NSOperation은 훌륭한 큐잉 시스템을 제공하지만, 자신 만의 큐잉 시스템을 만드는 것은 어렵지 않습니다. (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html) – MGA

답변

1

블록을 사용하도록 리펙터링하십시오. 요청 옆에 응답을 넣으시겠습니까?