0

我想运行我在函数中所做的一切:

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

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

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    [self doWorkInBackground];
});

但我不使用 locationManager。所以我希望应用程序在没有地图的情况下加载,当地图完成加载时它会出现在应用程序上。你能帮我吗?谢谢。

4

2 回答 2

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 是为了避免使用块的内存泄漏。

于 2014-02-17T12:35:28.307 回答
0

把它放在 info.plist 文件中

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

对我来说它的工作)

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

教程

于 2014-02-17T15:58:31.383 回答