Is NSXMLParser's parse method asynchronous

前端 未结 4 522
清酒与你
清酒与你 2021-02-14 08:29

Is NSXMLParser\'s parse method asynchronous?

in other words if i have an NSXMLParse object and I call [someParseObject parse] from the main thread, will it

相关标签:
4条回答
  • 2021-02-14 09:07

    Yes it blocks. Here is how i have used NSInvocationQueue to not block the UI thread when parsing... just call beginParsing with the url path as a string and it will take care of the rest:

    -(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 讨论(0)
  • 2021-02-14 09:17

    NSXMLParser can parse URL/Data, If we parse URL directly, it will freeze the UI(Main Thread),instead of that you can use Data Parsing by using NSXMLParser.Please go through NSURLConnection API for asynchronous fetching the data.

    0 讨论(0)
  • 2021-02-14 09:18

    It is not asynchronous so it will block the main thread.

    0 讨论(0)
  • 2021-02-14 09:28

    you can do like this NSXMLParser as asynchronous

    dispatch_async( dispatch_get_global_queue(0, 0), ^{
    
        NSString * dovizUrl=@"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];
        });
    });
    
    0 讨论(0)
提交回复
热议问题