Objective c 如何使用NSOperationQueue或performSelectorInBackground运行异步服务调用
我正在使用NSURLConnection异步调用从服务器加载数据。使用performSelectorInBackground调用服务方法时,该方法被调用,但NSURLConnection不提供任何响应。我使用异步调用,因为我必须先验证身份验证。每当我尝试在主线程上调用服务时,它会给我正确的数据,但UI会冻结。 1) 如何使用performSelectorInBackground进行异步调用 异步加载数据有什么不对Objective c 如何使用NSOperationQueue或performSelectorInBackground运行异步服务调用,objective-c,nsurlconnection,background-process,Objective C,Nsurlconnection,Background Process,我正在使用NSURLConnection异步调用从服务器加载数据。使用performSelectorInBackground调用服务方法时,该方法被调用,但NSURLConnection不提供任何响应。我使用异步调用,因为我必须先验证身份验证。每当我尝试在主线程上调用服务时,它会给我正确的数据,但UI会冻结。 1) 如何使用performSelectorInBackground进行异步调用 异步加载数据有什么不对 任何帮助都将不胜感激这里有一种可能的方法,尽管不是通过NSURLConnectio
任何帮助都将不胜感激这里有一种可能的方法,尽管不是通过NSURLConnection,但它不会阻止:
NSURL *xmlURL = [NSURL URLWithString:URL];
if (self.xmlParser != nil)
{
[self.xmlParser abortParsing];
self.xmlParser = nil;
}
dispatch_queue_t loadQueue1 = dispatch_queue_create("loadQueue1", NULL);
// Use another thread to avoid blocking main thread
dispatch_async(loadQueue1,^{
self.xmlParser = [[[NSXMLParser alloc] initWithContentsOfURL:xmlURL] autorelease];
// -------------------------------------------------------------------
[self.xmlParser setDelegate:self];
dispatch_async(dispatch_get_main_queue(),^{
if (self.xmlParser != nil)
{
[self.xmlParser parse];
}
});
});
dispatch_release(loadQueue1);
好的,在调试代码之后,我得到了错误。这不是异步调用,而是接收到巨大响应后的更新方法冻结了我的UI。另外,我用于打印数据的NSLog也导致了问题。如果您将
NSURLConnection
与异步API一起使用,您不需要使用performSelectorInBackground
。您从主线程调用它,并设置了一个委托,当数据到来或发生另一个事件时将调用该委托,而不会阻塞主线程。谢谢casillic,但这样我想我无法验证证书身份验证。我想要异步调用,但不冻结UI。