gpt4 book ai didi

iOS 后台执行函数

转载 作者:行者123 更新时间:2023-11-29 03:58:35 27 4
gpt4 key购买 nike

我是多线程新手,想知道如何在后台运行此函数?该函数仅返回一个用于 XML 解析并从另一个函数调用的 NSURL。或者甚至值得在后台运行,因为调用它的函数在该函数返回其 NSURL 之前不会继续。基本上,我只是想弄清楚如何加快速度,因为它需要一点时间才能完成!

+ (NSURL *)parserURL {

NSURL *theURL = [NSURL URLWithString:@"http://www.wccca.com/PITS/"];
NSData *data = [[NSData alloc] initWithContentsOfURL:theURL];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:data];
NSArray *elements = [xpathParser searchWithXPathQuery:@"//input[@id='hidXMLID']//@value"];
if (elements.count >= 1) {

TFHppleElement *element = [elements objectAtIndex:0];
TFHppleElement *child = [element.children objectAtIndex:0];
NSString *idValue = [child content];

NSString *stg = [NSString stringWithFormat:@"http://www.wccca.com/PITS/xml/fire_data_%@.xml", idValue];
NSURL *url = [NSURL URLWithString:stg];

return url;
}
return nil;
}

最佳答案

您的代码的主要问题是您正在使用阻止操作从网站获取数据。您肯定想在后台线程中执行此操作。但是,我建议您查看可以帮助您轻松完成此类操作的网络框架,即 AFNetworking ,

无论如何,我对多线程该操作或类似操作所遵循的策略如下:它分解为使用 GDC 来调度它。 ,然后在主线程中执行接收完成 block 并返回结果。

这是代码:

描述

首先声明您的函数接收一个 block 。一旦完成检索和解析数据,该 block 将最终执行。接下来,代码会要求 GDC 执行后台队列中的代码块。完成后,我们要求代码执行作为主线程中函数的参数提供的完成 block ,并向其提供解析后的字符串。

+(void) parserURL:(NSURL *) theURL completion:(void (^) (NSURL *finalURL))completionBlock{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSData *data = [[NSData alloc] initWithContentsOfURL:theURL];
TFHpple *xpathParser = [[TFHpple alloc] initWithHTMLData:data];
NSArray *elements = [xpathParser searchWithXPathQuery:@"//input[@id='hidXMLID']//@value"];
NSURL *url;
if (elements.count >= 1) {

TFHppleElement *element = [elements objectAtIndex:0];
TFHppleElement *child = [element.children objectAtIndex:0];
NSString *idValue = [child content];

NSString *stg = [NSString stringWithFormat:@"http://www.wccca.com/PITS/xml/fire_data_%@.xml", idValue];
url = [NSURL URLWithString:stg];
}else{
url = nil;
}
dispatch_async(dispatch_get_main_queue(), ^{
completionBlock(url);
});
});

}

您可以通过以下方式调用该方法:

[URLParser parserURL:[NSURL URLWithString:@"http://www.wccca.com/PITS/"] completion:^(NSURL *finalURL) {
NSLog(@"Parsed string %@", [finalURL absoluteString]);
}];

关于iOS 后台执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com