2011-09-23 8 views
1

performInvocation : 메소드에서 ASIHTTPRequest에 오류가 발생합니다.performInvocation에서 ASIHTTPRequest 충돌이 발생했습니다.

스택은 다음과 같습니다

+ (void)performInvocation:(NSInvocation *)invocation onTarget:(id *)target releasingObject:(id)objectToRelease 
{ 
    if (*target && [*target respondsToSelector:[invocation selector]]) { 
    [invocation invokeWithTarget:*target]; 
    } 
    CFRelease(invocation); 
    if (objectToRelease) { 
     CFRelease(objectToRelease); 
    } 
} 

을 나는 그것이 invokeWithTarget 호출에 발생하는 믿습니다

ASIHTTPRequest performInvocation:onTarget:releasingObject: 1877 
ASIHTTPRequest performSelector:onTarget:withObject:amount:callerToRetain: 1870 
ASIHTTPRequest updateProgressIndicator:withProgress:ofTotal: 1903 
ASINetworkQueue request:didReceiveBytes: 240 
ASIHTTPRequest performInvocation:onTarget:releasingObject: 1877 

이것은 충돌이 발생하는 방법입니다.

이것은 거의 발생하지 않지만 대규모 배포에서는 많은 일이 발생합니다. 주변 검색은

제가 추가로 모호한 참조가 발견

[cbInvocation retainArguments];

performSelector : ... [cbInvocation performSelectorOnMainThread : ...] 호출 바로 전에 호출하십시오. 그러나 그것은 거의 권위있는 것처럼 보이지 않았습니다. 그리고 나는 그러한 변화를 만들거나 신뢰할 수있을만큼 충분히 진행되고 있다고 확신하지 못합니다. 문제를 로컬에서 재현 할 수는 없지만이 스택 추적을 사용하여 많은 수의 충돌 보고서를 필드에서 가져옵니다.

iOS 코드에서이 방법을 사용합니다.

누구나 이것이 어떤지 알 수 있습니까?

답변

0

downloadProgressDelegate는 ASIHTTPRequest의 downloadProgressDelegate에서 먼저 제거하지 않고 해제되었습니다.

다운로드 진행 상황 위임에 대한 할당 해제의 구현에서

, 전화 :

[request setDownloadProgressDelegate:nil]; 
관련 문제