【问题标题】:Start location service with dispatch_once使用 dispatch_once 启动定位服务
【发布时间】:2014-11-04 17:22:13
【问题描述】:

由于应用程序的启动时间,我只想询问用户的位置一次。 我的意思是,每次用户启动应用程序时,请求他的位置服务(仅一次)。

我想用dispatch_once 这样做。

static dispatch_once_t oncePredicate;

dispatch_once(&oncePredicate, ^{

    [self.locationManager startUpdatingLocation];
});

这是最好的方法吗?还是有更好的办法?

提前致谢!

【问题讨论】:

  • 这段代码在哪里?你为什么担心它可能会运行不止一次,如果这样做会有什么副作用?
  • 感谢@Wain,此代码已到位,可以多次出现。我不担心,我问的是最佳实践......副作用应该是用户的位置问题(我知道它只问一次,但问题的时机对我来说很重要)

标签: ios objective-c iphone cllocationmanager


【解决方案1】:

通常,您不必担心多次调用startUpdatingLocation。相反,您应该做的是添加逻辑以确保仅在适当时调用它 - 即在它对用户有意义之后。

通常,这意味着存储一些状态,可能在用户默认值中,并在调用startUpdatingLocation 之前检查该状态。特别是,只有当用户在您的应用程序中达到一个特定阶段时才会设置状态,在该阶段向他们请求许可是明智的(并且他们已经批准,尽管需要更频繁地进行此检查,因为他们以后可能会决定撤销授权)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-30
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2012-08-12
    • 2015-02-18
    相关资源
    最近更新 更多