【发布时间】:2012-01-18 07:43:18
【问题描述】:
调试器在 ASIHTTPRequest 的 scheduleReadStream 方法中暂停,但没有产生错误。
更具体地说,它停在这一行:
[[self readStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:[self runLoopMode]];
无论我点击播放多少次,它都不会离开这条线或在控制台中报告任何错误。但是,当我点击播放时,我确实注意到主线程通过它的一些操作前进。
按照我的设置方式,我有一个在后台线程上工作的下载器(因此当它从已完成的请求中接收到它时,它可以进行解析和图像处理)。此下载器对象使用ASINetworkQueue 来安排请求。我想知道这是否会导致死锁。
这是从刚刚完成的请求(不是队列的一部分)中解析一些数据后将请求添加到队列的代码的 sn-p。
- (void)requestFinished:(ASIHTTPRequest *)request
{
dispatch_async(serialQueue, ^{
NSData *responseData = [request responseData];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:responseData];
[parser setDelegate:self];
if ([parser parse]) {
//Add pending operations
for (NSNumber * key in self.currentRequests.keyEnumerator) {
//Unrelated code getting the request from a dictionary
[self.networkQueue addOperation:request];
}
[self.networkQueue go];
}
});
}
请注意,我还在整个代码中异步执行不相关的请求,这可能在此队列被填充/被告知的同时进行。
【问题讨论】:
标签: iphone ios asihttprequest grand-central-dispatch nsoperationqueue