GeoFenceController 与 CLLocationManager 作为单例?

GeoFenceController with CLLocationManager as singleton?

我有一个地理围栏 class。我在争论它是否应该是一个单身人士。我的代码以任何一种方式工作,我已经阅读了几篇关于它的文章和帖子。但是我没有找到任何好的规则来说明什么时候使用单例是正确的。

虽然我真的想不出任何不应该的理由,但我有几个应该的理由; classic "there shall be only one!" 并且 class 实际上没有任何依赖关系,据我所知,除了 locationManager 对象,它可能会自己创建,因为它其他地方不需要,我不认为可能需要任何特殊的实现。由于这个原因,我认为注入 locationManager 没有任何意义。它还需要在应用程序中使用另一个共享实例来调用服务器来获取一些数据。 我认为将其设为单例的最重要原因是它会跟踪受监视的区域,并在 NSUserDefaults 中存储一些与此相关的数据以及一些时间戳和其他次要内容。我担心 class 的另一个实例可能会导致应用程序的行为不一致。

我的代码旨在作为扩展添加到现有应用中。

我不认为发布我的代码真的很重要,但我将简要解释一下 class 的作用: 在实例化时,它将开始监视用户位置并在后台继续这样做。 它将从服务器请求位置列表,并根据设备的当前位置接收这些位置。这些位置将被分类和存储,并且将监控距离设备最近的 20 个位置以供进入。这几乎就是它的基础知识。地理围栏。

我希望 and/or 反对在这种情况下使用单例。

GeoFenceController 将使用全局资源 - 可供您的应用使用的 20 个区域池。该池以这种方式实现,不仅容量在 CLLocationManager 的所有实例之间共享,所有区域也将有效共享,因为 CLLocationManager 的所有实例将向其代表报告 enter/exit 事件所有地区。跟踪容量限制和 "own" 事件将导致代码复杂。

这就是单例模式在这里非常受欢迎的原因。