如何在整个应用程序中共享CLLocation?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在整个应用程序中共享CLLocation?相关的知识,希望对你有一定的参考价值。

我正在开发一个应用程序,该应用程序具有几个使用用户当前位置的视图控制器。 由于无论我在哪个视图中,用户的当前位置都应该相同,因此我认为在视图控制器之间共享此位置是有意义的。 我应该在我的应用程序委托中定义一个CLLocation,然后设置每个视图控制器usersCurrentLocation来匹配它吗? 当一个视图控制器更新位置时,如何确保其他每个视图控制器都接受更改? 对我来说,这听起来像是一个全局变量的工作,但我知道它们并不是一种非常“可可”的工作方式。 正确的方法是什么? 代码示例将很有帮助。

答案

单例是一种完美的可可做事方式,在应用启动时实例化的“位置管理器”单例(或您选择的任何名称)不仅可以为需要该信息的任何人提供信息,还可以定期检查是否有信息。位置更改并向所有侦听器发送通知。

马特·加拉格尔(Matt Gallagher) 在他的博客上出色地解释了单例 ,并包括一个超级方便的宏,可以完成繁重的工作。

另一答案

不要将位置分配为属性,而应将CCLocationManager作为属性。 相同的工作量并保持最新状态……每当您需要当前位置时,只需向其发送location信息即可。

另一答案

这是一个哲学问题。 如果只是少量数据,那么是的,应用程序委托中的命名属性是一种很好的处理方式。 特别是如果它是应用程序的属性(例如它在物理上运行的位置)。 我不介意

数据更多,我更喜欢创建一个单例数据管理器类,因此可以全局获取它,但具有自己的名称空间。

如果我是您,那么我会将所有位置管理代码都驻留在应用程序委托本身中,并将各个视图控制器视为委托人的位置管理器的“客户端”,从委托人的.currentLocation(或其他属性)中获取当前状态。如所须。

如果您可以不时地处理一些不确定的精度,则还可以考虑使用CLLocationManager的“重大更改更新”模式,而不是使用实时GPS实时跟踪。

以上是关于如何在整个应用程序中共享CLLocation?的主要内容,如果未能解决你的问题,请参考以下文章

linux 中的多进程中,父进程与子进程共享的代码段和数据段、堆栈段,是整个程序还是出现在fork()函数后?

如何使用 iPhone 的 CLLocation 类将纬度和经度分配给变量?

在 iphone 中暂停和恢复 CLLocation 跟踪

CLLocation GeoFire 定位时间

用负值计算“timeIntervalSinceNow”(CLLocation 示例)?

如何从 CLLocation 变量中提取经度和纬度?