Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该在Swift中使用单例位置管理器吗?_Ios_Swift_Core Location - Fatal编程技术网

Ios 我应该在Swift中使用单例位置管理器吗?

Ios 我应该在Swift中使用单例位置管理器吗?,ios,swift,core-location,Ios,Swift,Core Location,上下文: 我的应用程序需要用户在几个不相关的视图控制器中的当前位置,到目前为止,我正在每个控制器中创建一个CLLocationManager,并反复请求当前位置 然而,在我看来,这是不对的。它是重复代码和不完善。 我在网上看到过几篇提到单身位置经理的文章。我还听说尽量避免单身 问题: 我应该创建一个管理位置的单例类吗?如果没有,您会建议其他什么解决方案来避免这种重复的代码 我还听说尽量避免单身 如果应用程序运行的某个解除分配周期需要该数据,则上述语句是正确的,因此,在应用程序运行完成后,单例在整

上下文:

我的应用程序需要用户在几个不相关的视图控制器中的当前位置,到目前为止,我正在每个控制器中创建一个CLLocationManager,并反复请求当前位置

然而,在我看来,这是不对的。它是重复代码不完善
我在网上看到过几篇提到单身位置经理的文章。我还听说尽量避免单身

问题:

我应该创建一个管理位置的单例类吗?如果没有,您会建议其他什么解决方案来避免这种重复的代码


我还听说尽量避免单身

如果应用程序运行的某个解除分配周期需要该数据,则上述语句是正确的,因此,在应用程序运行完成后,单例在整个应用程序生命周期内保持活动状态,因此从内存角度来看,单例成为一个问题,在您的情况下(应用程序内的所有vcs都需要该位置)最适合单件,以避免重复-效率较低的代码和高内存问题

不用说,90%的apple类使用单例e.x

URLSession.shared

NSNotificationCenter.default

UNUserNotificationCenter.current

UserDefaults.standard

FileManager.default


我还听说尽量避免单身

如果应用程序运行的某个解除分配周期需要该数据,则上述语句是正确的,因此,在应用程序运行完成后,单例在整个应用程序生命周期内保持活动状态,因此从内存角度来看,单例成为一个问题,在您的情况下(应用程序内的所有vcs都需要该位置)最适合单件,以避免重复-效率较低的代码和高内存问题

不用说,90%的apple类使用单例e.x

URLSession.shared

NSNotificationCenter.default

UNUserNotificationCenter.current

UserDefaults.standard

FileManager.default


没有硬性规定。苹果很清楚,可以实例化多个位置管理器。但是,如果这样做,您可能会感到困惑,因为每个人都需要一个代理,每个人都需要自己的设置,等等。因此,你对这种方法保持警惕是正确的


这是一种标准策略,可以选择在应用程序的整个生命周期中始终存在的实例(例如,应用程序代理或根视图控制器),并使用位置管理器初始化实例属性。没有任何理由将单例模式添加到组合中;你只需做一次,然后抓住它。

没有硬性规定。苹果很清楚,可以实例化多个位置管理器。但是,如果这样做,您可能会感到困惑,因为每个人都需要一个代理,每个人都需要自己的设置,等等。因此,你对这种方法保持警惕是正确的


这是一种标准策略,可以选择在应用程序的整个生命周期中始终存在的实例(例如,应用程序代理或根视图控制器),并使用位置管理器初始化实例属性。没有任何理由将单例模式添加到组合中;你只需做一次并保持它。

模式不是邪恶的。这取决于用户。它们是针对特定问题的解决方案。这取决于你如何看待你的问题以及你想要实现什么

在您的情况下,整个应用程序都需要一个location manager实例,并且在多个位置使用它,因此您需要一个包装器管理器。如果您只需要一个配置,那么使用singleton是有意义的

苹果公司建议,只要你需要,就要有一份强有力的经理推荐信

创建CLLocationManager类的实例,并在应用程序中的某个位置存储对该类的强引用。 需要保持对location manager对象的强引用,直到涉及该对象的所有任务完成。因为大多数位置管理器任务是异步运行的,所以将位置管理器存储在局部变量中是不够的


模式不是邪恶的。这取决于用户。它们是针对特定问题的解决方案。这取决于你如何看待你的问题以及你想要实现什么

在您的情况下,整个应用程序都需要一个location manager实例,并且在多个位置使用它,因此您需要一个包装器管理器。如果您只需要一个配置,那么使用singleton是有意义的

苹果公司建议,只要你需要,就要有一份强有力的经理推荐信

创建CLLocationManager类的实例,并在应用程序中的某个位置存储对该类的强引用。 需要保持对location manager对象的强引用,直到涉及该对象的所有任务完成。因为大多数位置管理器任务是异步运行的,所以将位置管理器存储在局部变量中是不够的


如果您创建一个单例位置管理器,那么它的工作方式必须与其他单例不同。不能使用普通委托模式将位置更新和错误告知其他对象,因为普通委托模式是一对一关系。您必须使用多个委托(singleton有一个感兴趣的对象数组,它向每个委托发送相同的消息,例如位置更新)。下面是另一个关于为什么难以使用的问题:

你可以通过通知来解决这个问题,但我个人认为这是一个糟糕的模式(它将事情分离得太多,并且很难遵循责任路径)

singleton还必须跟踪其感兴趣的对象是否要求它停止或启动。如果他们都要求它停止,那么它应该关闭更新。如果只是一个人想要更新,它必须给他们供电。搜寻艾尔