AFURLConnectionOperation.m 中 connection:didReceiveData 中的无限循环

Infinite loop in connection:didReceiveData in AFURLConnectionOperation.m

我正在为我的 iOS 项目使用 AFNetworking2,该项目需要大量图像加载。

下载一定数量的图片后,所有发出的请求都在操作队列中排队,永不发出。

我发现那是因为在

AFURLConnectionOperation.m,(void)connection:didReceiveData

有一个 while(YES) 循环,只有在

时才会中断

[self.outputStream hasSpaceAvailable]

或当

self.outputStream.streamError

发生。

但是,在我的例子中,[self.outputStream hasSpaceAvailable] returns 否,操作仍然停留在 while (YES) 循环中。

有没有人遇到过这个问题,解决方案是什么?

这是

的代码

AFURLConnectionOperation.m,(void)connection:didReceiveData

上下文:

- (void)connection:(NSURLConnection __unused *)connection
    didReceiveData:(NSData *)data
{
    NSUInteger length = [data length];
    while (YES) { 
        ...
        if ([self.outputStream hasSpaceAvailable]) {
            ...
            break;
        }
        if (self.outputStream.streamError) {
            ....
            return;
        }
    }
    ...
}

注意:我目前正在使用下面的代码覆盖该函数来解决这个问题。

- (void)connection:(NSURLConnection __unused *)connection
    didReceiveData:(NSData *)data
{
    NSUInteger length = [data length];
    if ([self.outputStream hasSpaceAvailable]) {
        const uint8_t *dataBuffer = (uint8_t *) [data bytes];
        [self.outputStream write:&dataBuffer[0] maxLength:length];
    }
}

这似乎是 AFNetworking 中的一个错误。参见 here

此问题已提交修复 mentioned,但由于某些原因 (2.5.4) 在最新版本中似乎不可用。