ASIHTTPRequest在performInvocation中崩溃

时间:2011-09-23 20:11:33

标签: objective-c ios4 asihttprequest

我在performInvocation:方法中遇到ASIHTTPRequest崩溃。

堆栈是:

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];

返回performSelector:...在[cbInvocation performSelectorOnMainThread:...]调用之前。但它似乎并不具有权威性,而且我不确定我是否知道那里发生了什么,足以制造和/或信任这种变化。我无法在本地重现问题,但是我从现场获得了大量的崩溃报告。

顺便提一句,这是关于iOS代码的。

任何人都知道这可能是什么?

1 个答案:

答案 0 :(得分:0)

您的downloadProgressDelegate已被释放,而不是首先从ASIHTTPRequest的downloadProgressDelegate中删除它。

在下载进度委托的dealloc实现中,请致电:

[request setDownloadProgressDelegate:nil];