代码之家  ›  专栏  ›  技术社区  ›  user160917

NSXMLParser的解析方法是异步的吗

  •  10
  • user160917  · 技术社区  · 15 年前

    NSXMLParser的解析方法是异步的吗?

    换句话说,如果我有一个NSXMLParse对象并调用 [someParseObject parse]

    4 回复  |  直到 13 年前
        1
  •  18
  •   Mike Weller    15 年前

    它不是异步的,因此会阻塞主线程。

        2
  •  1
  •   Srinivas G    15 年前

    NSXMLParser可以解析URL/数据,如果我们直接解析URL,它会冻结UI(主线程),而不是使用NSXMLParser进行数据解析,请通过NSURLConnection API异步获取数据。

        3
  •  0
  •   Erhan Demirci    12 年前

    您可以将这个NSXMLParser作为异步的

    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];
        });
    });
    
        4
  •  0
  •   Marek R    11 年前

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