没有冻结用户界面的后台api调用

时间:2017-10-13 09:58:42

标签: ios objective-c multithreading nsurlsession

我希望在后台以10分钟的时间间隔连续呼叫api,而不会在同一个应用程序中中断用户界面和其他api呼叫。

就像api会每10分钟在后端数据库中永久更新我的位置,但这个api不会打断用户界面和其他api,因为我使用应用程序会调用它。

2 个答案:

答案 0 :(得分:0)

您应该在不同的线程中运行代码(在iOS中称为Queue)。 如果你阅读文档,它会更好。在这里,我可以向您展示一个示例,在这里我在后台下载图像,然后上传UI:

 if let url = imageURL{
            DispatchQueue.global(qos: .userInitiated).async { [weak self] in  //background queue
                let urlContents = try? Data(contentsOf: url)
                if let imageData = urlContents{
                    DispatchQueue.main.async {          //come back to the UI Queue to upload the UI
                        self?.image = UIImage(data: imageData)
                    }

                }
            }
        }

要了解每个参数和每种可能性,请查看文档。

答案 1 :(得分:0)

您可以像递归方法一样编码来解决您的问题。下面有一个以Objective-c

编码的解决方案
- (void)myRepetitiveMethod {

   dispatch_queue_t q_background = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
                                               double delayInSeconds = 600;
                                               dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
                                               dispatch_after(popTime, q_background, ^(void){
//do something                                                   
[self myRepetitiveMethod];
                                               });
}

古德勒克