如果我有一个标签栏应用程序,并计划在不同标签中使用Core Location,是否有一个很好的共同位置来放置用于分配/初始化CLLocationManager的代码,并在调用startUpdatingLocation后获取更新?或者,如果它将在两个不同的选项卡中使用,那么我是否只需将其放入每个选项卡的代码中?只是想知道自从我刚接触编程以来最佳实践是什么。感谢。
答案 0 :(得分:5)
我不同意John,AppDelegate是“简单”的方式,但并不总是更好。
我会用单身人士做这件事。您可以查看Matt Gallagher关于Singletons, AppDelegates and top-level data的文章以供参考。
答案 1 :(得分:1)
如果您注意到您正在复制您所写的内容,或者面对编写存在的代码,请考虑创建一个接口(对象,设置函数等)来处理这些任务。
见DRY(不要重复自己)。当你编写一些应用程序时,会有很多重复的功能。最好写一次,然后写得正确。
这里有一些高级指南:
不要将特定于应用程序的功能放在通用界面中(而是使用2个项目共享的子类)
始终保持您的基地没有黑客攻击(除非您正在处理系统库中的问题)。如果客户端(例如,子类,呼叫者)需要特定的解决方法或需要特定检查,那么最好让他们处理它。
使用断言来确保它们按预期使用接口,检查每个参数,前置条件/后置条件,对象的状态等。
保持您的对象/界面非常小和可维护,明确的目的是使用它们。当然,这将导致更多的对象。
避免使用单例和静态数据的冲动;即使只是强迫客户创建一个类的实例,也几乎总有一种更好的方法。
使用这些接口创建库,并按逻辑划分它们。
现在已经涵盖......
我首先使用您需要的对象(可能是多个)实例。文档中没有任何内容表明“您不应该创建对象的多个实例”。
如果这在分析中不合适,那么然后考虑使用共享对象将消息中继到需要更新的对象(在您的应用程序中)。
理由:机会是,苹果已经优化了实施,所以你没必要。
最后,我在一个需要大量位置请求的应用程序中打破了这些指南,并显示了大量的位置信息。该应用程序在存储位置管理器和位置(以及其他内容)的接口后面使用了一些静态数据。所以我最终使用私有(隐藏)静态数据的静态数据来减少这种情况下的内存和CPU需求。
答案 2 :(得分:-3)
App Delegate是此类数据的良好中心位置。您随时可以使用[[UIApplication sharedApplication] delegate]