10
votes

La méthode d'analyse de NSXMLParser est-elle asynchrone

La méthode d'analyse de NSXMLParser est-elle asynchrone?

En d'autres termes Si j'ai un objet NSXMLLARSE et que j'appelle [onepaSObject parse] à partir du fil principal, bloquera-t-il le fil principal pendant sa chose?


0 commentaires

4 Réponses :


18
votes

Il n'est pas asynchrone, il ne bloquera donc pas le fil principal.


0 commentaires

1
votes

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>


0 commentaires

0
votes

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];
}


1 commentaires

Pourquoi relâchez-vous le paramètre de chemin?



0
votes

Vous pouvez faire comme ça NSXMLParser comme asynchrone xxx


2 commentaires

[XMLPARSER Payse] fonctionne sur le fil principal et le bloquera. Vous n'êtes que la méthode asynchrone.


Dit @philipkramarov.