1

디버거는 ASIHTTPRequest의 scheduleReadStream 메소드 내에서 일시 정지하지만 오류는 발생하지 않습니다.오류없이 ASIHTTPRequest의 scheduleReadStream에서 중지하는 디버거

은 더 구체적으로,이 라인에 중지 것 :

[[self readStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:[self runLoopMode]]; 

상관없이 내가 플레이를 명중 횟수, 그것은이 라인을 이동하거나 콘솔에서 오류를보고하지 않습니다. 그러나 내가 게임을 할 때 메인 스레드가 몇 가지 작업을 진행한다는 것을 알았습니다.

내가 물건을 설정하는 방법은 백그라운드 스레드에서 작동하는 다운로더를 가지고 있습니다 (완료된 요청에서 파싱 및 이미지 조작을 할 수 있도록). 이 다운로더 객체는 ASINetworkQueue을 사용하여 요청을 예약합니다. 어쩌면 이것이 교착 상태를 일으키는 지 궁금합니다.

방금 ​​완료 한 요청 (큐의 일부가 아님)에서 일부 데이터를 구문 분석 한 후 큐에 요청을 추가하는 코드 스 니펫입니다. 나는 또한이 큐가 작성되고 같은 시간에 진행 될 수있는 코드를 통해 비동기 적으로 관련이없는 요청을하고 있어요

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    dispatch_async(serialQueue, ^{ 
     NSData *responseData = [request responseData]; 
     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:responseData]; 
     [parser setDelegate:self]; 
     if ([parser parse]) { 
      //Add pending operations 
      for (NSNumber * key in self.currentRequests.keyEnumerator) { 
       //Unrelated code getting the request from a dictionary 
       [self.networkQueue addOperation:request]; 
      } 
      [self.networkQueue go]; 
     } 
    }); 
} 

주/이동했다.

답변

1

알아 냈어. 거기에 나온 것은 EXC_BAD_ACCESS 이었지만 아이폰에서 돌아갈 때는 나타나지 않았다. 시뮬레이터에서 실행할 때 실제로 나타났습니다. 이 악의적 인 접근은 URL을 설정하는 대신 initWithURL 메서드를 사용하지 않았기 때문에 발생했습니다 (객체를 만들 때 아직 URL을 사용할 수 없었기 때문에). URL이 준비되고 모든 것이 좋으면 지금은 initWithURL으로 전화합니다.