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];
}
}
我正在为我的 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];
}
}