我的应用会执行后台提取,在其中与网络服务进行一系列通信,并在有新信息的情况下发布本地通知。
我有一个名为 GetEverything 的伞方法,它启动了这个登录,获取,发布,处理数据等链。这是在后台提取时调用的方法。
GetEverything 也可以由前台用户触发。在这种情况下,它总是按预期工作。
当从背景提取中调用 GetEverything 时,会遇到 GetEverything 链的各个部分。一些衍生线程只是挂起。只有当我将应用程序带到前台时,它们才会恢复。
为了解决这个问题,我强迫 GetEverything 加入低prio线程:
- (void)GetEverything:(void (^)(BOOL))completionHandler{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//my chain of events;
});
}
这有很大的帮助,但是,我仍然必须深入到链中,找出其他方法,并强制它们处于低优先级。
我的链中弹出回主线程的方法的一个例子是
-(NSString*) deleteHTMLfrom: (NSString*) htmlString {
if (![htmlString isKindOfClass:[NSNull class]]){
NSAttributedString* attributedText = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
documentAttributes:nil
error:nil];
NSString* plainText = [attributedText string];
return plainText;
}
return htmlString;
}
我的问题: 我如何强制所有的链接'我的链在后台线程上执行?