2010-05-19 13 views

Respuesta

18

No es asíncrono, por lo que bloqueará el hilo principal.

1

NSXMLParser puede analizar URL/Datos, si analizamos URL directamente, se congelará la interfaz de usuario (Hilo principal), en lugar de que se puede utilizar el análisis de datos mediante NSXMLParser. Vaya a NSURLConnection API para buscar asincrónicamente los datos.

0

Sí bloquea. Así es como he utilizado NSInvocationQueue a no bloquear el hilo de interfaz de usuario al analizar ... solo llame beginParsing con la ruta URL como una cadena y que se hará cargo del resto:

-(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]; 
} 
+0

¿Por qué está liberando el parámetro de ruta? – jcpennypincher

0

se puede hacer como esto NSXMLParser asincrónico

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]; 
    }); 
}); 
+2

[xmlParser parse] se ejecuta en el hilo principal y lo bloqueará. Solo inicia el método de forma asíncrona. –

+0

Lo que dijo @PhilipKramarov. – nmdias

Cuestiones relacionadas