iOS设置Geofences的发布最佳实践

时间:2015-10-20 11:46:45

标签: ios objective-c iphone

所以在发布我的应用程序时,我正在做以下事情:

  1. 从我的服务器下载位置列表
  2. 将用户的当前位置与所有位置进行比较,并保存最近的20个
  3. 删除已注册地理围栏的旧列表(因为用户的位置可能已更改)并停止监控
  4. 保存/添加新的Geofences并开始区域监控。
  5. 我知道如何做所有这些事情。问题是什么是最好的方法,因为我实际上不必更新任何视图,我也不会在应用程序的任何其他位置使用用户位置?我应该创建一个单例来执行此操作吗?如果我基本上做了它将不得不在初始化时做所有这些,似乎我不可能再次在应用程序中访问它。

    我想在AppDelegate中编写所有内容可能有两个原因:

    1. 当应用程序未运行时触发Geofence时,AppDelegate将处理委托方法- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region,因此将所有其他委托放在这里也是有意义的:
    2. 此外,将来可能需要致电

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

      跟踪用户位置的重大变化,以更新地理围栏以获得最接近的新地理位置。因为这也将在后台调用,并且在app代理中也许会是最好的。

    3. 或任何其他想法。

1 个答案:

答案 0 :(得分:2)

我建议不要使用大量地理围栏代码来混淆AppDelegate。随着时间的推移,它往往只会越来越大(而且越来越难以维护)。关注点的分离往往表明应该将此代码移动到单独的类中。考虑到这一点,我的建议是:

  • 创建一个新的地理围栏管理器类,例如,XXGeofenceManager。
  • 将您的CLLocationManager移动到XXGeofenceManager,并使XXGeofenceManager符合CLLocationManagerDelegate(即将此代码从AppDelegate移至您的地理围栏管理器)。
  • 在AppDelegate中创建一个XXGeofenceManager实例,并在实例变量中保留它。然后在应用程序启动时调用一些方法来安装地理围栏,并将其余功能留在地理围栏管理器中。

这样,您最终只会向AppDelegate添加几行,并且所有与地理围栏相关的代码最终都会放在一个地方。

希望有所帮助!