La méthode d'analyse de NSXMLParser est-elle asynchrone? P>
En d'autres termes Si j'ai un objet NSXMLLARSE et que j'appelle [onepaSObject parse] code> à partir du fil principal, bloquera-t-il le fil principal pendant sa chose? P>
4 Réponses :
Il n'est pas asynchrone, il ne bloquera donc pas le fil principal. P>
NSXMLPARSER peut analyser l'URL / données, si nous analysons directement l'URL, il gèlera l'interface utilisateur (fil principal), au lieu de pouvoir utiliser des données d'analyse de données à l'aide de NSXMLPARSER.Veuillez passer via NsurlConnection API pour une extraction asynchrone. < / p>
Oui, il bloque. Voici comment j'ai utilisé NSInvocationQueue pour ne pas bloquer le fil d'interface utilisateur lors de l'analyse ... il suffit d'appeler Belvarsing avec le chemin d'URL en tant que chaîne et cela s'occupera du reste:
-(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]; }
Pourquoi relâchez-vous le paramètre de chemin?
Vous pouvez faire comme ça NSXMLParser comme asynchrone
[XMLPARSER Payse] fonctionne sur le fil principal et le bloquera. Vous n'êtes que la méthode asynchrone.
Dit @philipkramarov.