ios:如何在后台运行位置管理器

时间:2014-02-17 12:09:46

标签: ios objective-c cllocationmanager background-thread

我想在我的功能中运行我所做的一切:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
}

在后台。我有我的页面有很多元素,我希望地图的负载不会阻止应用程序的使用。当应用程序加载时,地图被初始化,用户必须等待几秒钟才能加载地图。我知道我们可以在后台用

做一些事情
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    [self doWorkInBackground];
});

但我没有使用locationManager。 所以我想要没有地图的应用程序加载,并且当地图完成加载它出现在应用程序上。 你可以帮帮我吗 ? 感谢。

2 个答案:

答案 0 :(得分:0)

是的,您应该将代码放在您发布的异步块之间。从块中加载地图后,您在视图控制器上调用另一个方法来显示地图。你必须在主线程中执行,否则你的家伙会陷入困境。

__weak typeof(self) weakSelf = self;    
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // load your map here
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf mapWasLoaded];
        });
 });

__ weak是为了避免内存泄漏。

答案 1 :(得分:0)

将此信息放入info.plist文件

<key> UIBackgroundModes</key>
    <string>location</string>

对我来说,它的工作)

另外,非常好的教程!我从它开始!

Tutorial