2014-11-04 32 views
1

由于应用程序启动生命,我只想询问用户的位置。 我的意思是,每当用户启动应用程序,请求他的位置服务(只有一次)。使用dispatch_once启动位置服务

我以为这样做与dispatch_once

static dispatch_once_t oncePredicate; 

dispatch_once(&oncePredicate, ^{ 

    [self.locationManager startUpdatingLocation]; 
}); 

这是否是最好的方法呢?或者有更好的方法?

在此先感谢!

+1

此代码是什么?为什么你担心它可能会运行不止一次,如果它发生了副作用会是什么? – Wain 2014-11-04 09:14:53

+0

谢谢@Wain,这段代码是可以多次发生的。我并不担心,我会询问最佳实践......副作用应该是用户的位置问题(我知道它只提问一次,但问题的时间对我来说很重要) – gran33 2014-11-04 09:17:27

回答

1

一般来说,您不必担心多次拨打startUpdatingLocation。相反,你应该做的是添加逻辑,以确保它只在适当时被调用 - 即在它对用户有意义之后。

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

相关问题