调试器在ASIHTTPRequest的scheduleReadStream方法中暂停,但不会产生错误。
更具体地说,它停在这条线上:
[[self readStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:[self runLoopMode]];
无论我多少次点击,它都不会离开此行或报告控制台中的任何错误。我注意到,当我点击播放时,主线程会通过一些操作前进。
我设置的方式,我有一个下载程序正在后台线程上工作(因此它可以在从完成的请求中接收它时进行解析和图像处理)。此下载程序对象使用ASINetworkQueue
来安排请求。我想知道这是否会造成僵局。
这是代码片段,它在从刚刚完成的请求(不是队列的一部分)中解析一些数据后将请求添加到队列。
- (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];
}
});
}
请注意,我还在整个代码中异步执行不相关的请求,这可能会在此队列被填充/告知的同时进行。
答案 0 :(得分:1)
想出来。原来有EXC_BAD_ACCESS
,但在iPhone上运行时却没有出现。在模拟器上运行时,它实际上显示正常。这种糟糕的访问是由于我没有使用initWithURL
方法,而是设置URL(因为在创建对象时我还没有提供URL)。一旦URL准备好,一切都很好,我现在就打电话给initWithURL
。