Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 是NSXMLParser';s异步解析方法_Iphone_Objective C_Cocoa_Concurrency_Nsxmlparser - Fatal编程技术网

Iphone 是NSXMLParser';s异步解析方法

Iphone 是NSXMLParser';s异步解析方法,iphone,objective-c,cocoa,concurrency,nsxmlparser,Iphone,Objective C,Cocoa,Concurrency,Nsxmlparser,NSXMLParser的解析方法是异步的吗 换句话说,如果我有一个NSXMLParse对象,我从主线程调用[someParseObject parse],它会在执行任务时阻塞主线程吗?它不是异步的,所以它会阻塞主线程。NSXMLParser可以解析URL/数据,如果我们直接解析URL,它会冻结UI(主线程),相反,您可以使用NSXMLParser来使用数据解析。请通过NSURLConnection API异步获取数据。是,它会阻塞。下面是我如何使用NSInvocationQueue在解析时不阻止

NSXMLParser的解析方法是异步的吗


换句话说,如果我有一个NSXMLParse对象,我从主线程调用
[someParseObject parse]
,它会在执行任务时阻塞主线程吗?

它不是异步的,所以它会阻塞主线程。

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

是,它会阻塞。下面是我如何使用NSInvocationQueue在解析时不阻止UI线程。。。只需使用url路径作为字符串调用beginParsing,它将处理其余的问题:

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

您可以将此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];
    });
});

[xmlParser parse]在主线程上运行并将阻止它。您只初始化了异步方法。@PhilipKramarov说了什么。为什么要释放path参数?