NSXMLParser的解析方法是異步的嗎?NSXMLParser的解析方法是異步的嗎
換句話說,如果我有一個NSXMLParse對象,並且我從主線程中調用[someParseObject parse]
,它會阻止主線程執行它的操作嗎?
NSXMLParser的解析方法是異步的嗎?NSXMLParser的解析方法是異步的嗎
換句話說,如果我有一個NSXMLParse對象,並且我從主線程中調用[someParseObject parse]
,它會阻止主線程執行它的操作嗎?
它不是異步的,所以它會阻塞主線程。
NSXMLParser可以解析URL/Data,如果我們直接解析URL,它將凍結UI(主線程),而不是通過使用NSXMLParser來使用數據解析。請通過NSURLConnection API來異步獲取數據。
是的,它阻止。下面是我用NSInvocationQueue解析時不會阻塞UI線程...只是調用beginParsing作爲一個字符串的URL路徑,並會照顧其餘的:
-(void) beginParsing:(NSString*) path{
if(path ==nil)
return;
NSOperationQueue *queue = [[NSOperationQueue new] autorelease];
NSInvocationOperation *operation= [[[NSInvocationOperation alloc]
initWithTarget: self
selector: @selector(createRequestToGetData:)
object: path]
autorelease];
[queue addOperation:operation];
}
-(void)createRequestToGetData:(NSString*)path
{
NSURL* Url = [NSURL URLWithString:path];
NSXMLParser* parser = [[NSXMLParser alloc] initWithContentsOfURL:Url];
[parser setDelegate:self];
NSLog(@"path is %@",path);
[parser parse];
[path release];
[parser release];
}
你可以做這樣的NSXMLParser as asynchronous
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSString * [email protected]"http://www.tcmb.gov.tr/kurlar/today.xml";
NSURL *url = [NSURL URLWithString:dovizUrl];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
xmlParser.delegate = self;
// call the result handler block on the main queue (i.e. main thread)
dispatch_async(dispatch_get_main_queue(), ^{
// running synchronously on the main thread now -- call the handler
[xmlParser parse];
});
});
[xmlParser parse]在主線程上運行並將阻塞它。 您只能初始化異步方法。 – 2014-06-16 07:47:00
@PhilipKramarov說什麼。 – nmdias 2016-05-12 07:49:16
爲什麼要釋放路徑參數? – jcpennypincher 2015-04-16 19:02:21