强制在后台线程

时间:2017-06-27 07:26:32

标签: ios multithreading

我的应用会执行后台提取,在其中与网络服务进行一系列通信,并在有新信息的情况下发布本地通知。

我有一个名为 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;
}

我的问题: 我如何强制所有的链接'我的链在后台线程上执行?

0 个答案:

没有答案
相关问题