Сбой ASIHTTPRequest при выполненииInvocation - PullRequest
1 голос
/ 24 сентября 2011

Я получаю сбой в ASIHTTPRequest при выполнении executeInvocation: метод.

Стек:

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

Это метод, в котором происходит сбой:

+ (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.

Это случается редко, но в крупномасштабных развертываниях это происходит очень часто.

При поиске я обнаружил смутноессылка на добавление:

[cbInvocation retainArguments];

обратно в executeSelector: ... непосредственно перед вызовом [cbInvocation executeSelectorOnMainThread: ...].Но это вряд ли показалось авторитетным, и я не уверен, что понимаю, что там происходит, достаточно, чтобы произвести и / или доверять такого рода изменениям.Я не могу воспроизвести проблему локально, но я получаю большое количество отчетов о сбоях с этой трассировкой стека из поля.

Кстати, по коду iOS.

Кто-нибудь знает, чтоэто может быть?

1 Ответ

0 голосов
/ 24 сентября 2011

Ваша загрузка ProgressDelegate была освобождена, но не удаляется в первую очередь из загрузки ASIHTTPRequest ProgressDelegate.

В реализации dealloc для вашего делегата процесса загрузки позвоните:

[request setDownloadProgressDelegate:nil];
...