gpt4 book ai didi

ios - 单例 : Pros, 缺点,设计问题

转载 作者:行者123 更新时间:2023-12-03 16:53:00 24 4
gpt4 key购买 nike

我承认。我正在使用单例。我知道你们可能会说什么,坦率地说,在互联网上看到所有这些答案,谈论单例的不好的方面,并提出反对它们的建议,这真的让我质疑我的编程实践。

我已经阅读了 StackOverflow 中有关单例的一些帖子,但我发布这个问题不仅是为了询问它们,而且是为了了解一些关于我在程序中使用它们的方式的见解。

我觉得我必须在这里澄清一些事情并询问方向。

所以让我们考虑一些我经常使用单例的情况:

  1. 创建全局变量的访问器,例如我的 Root View Controller 、特定且始终存在的 View Controller 、应用程序状态、我的全局托管对象上下文......类似的东西
  2. 创建实用程序类,其工作是处理应用程序范围内的数据。例如,我创建一个 Singleton 来操作我的缓存数据库,该数据库依赖于 Core Data。由于我需要创建缓存和其他内容以不同的 View 放入数据库中,因此创建一个处理数据库输入/输出的类(注意线程安全)感觉更好。
  3. 处理网络 session 。实际上,我用它来保持连接并每 XX 秒向服务器发送 PINg 等内容。

我认为这就是总结。我真的很想听听其他开发者对此事的意见。

您认为针对上述问题有更好的解决方案吗?

您是否认为总会有比单例更好的替代方案并且应该避免它们?

就多线程而言,忘记单例会更好吗?

任何建议和想法都会有用,并且非常受欢迎。

最佳答案

单例当然并不总是邪恶的,但正如您提到的,您必须小心线程安全(关于该主题,请查看有关单例初始化的blog post)。

单例经常被谴责为邪恶的一个原因是,如果它们过于依赖单例及其行为,它们会使程序的“扩展”部分变得更加困难。您提到数据库访问,服务器或桌面应用程序可能会从单例实现开始来处理所有数据库需求,然后尝试使用多个连接来加速独立请求等。分解此类代码可能非常困难。

即使在使用 CoreData 的 iOS 应用程序中,不依赖应用程序委托(delegate)或某些 Root View Controller 上的全局 ManagedObjectContext 也很有用。

如果向每个 View Controller 传递对 ManagedObjectContext 的引用,您可以获得一些灵 active 。大多数时候,您只需将相同的上下文从一个 View Controller 传递到下一个 View Controller ,但如果您决定将来这样做,您可以为编辑 View 创建一个新的 ManagedObjectContext,在其中可以使用以下功能的撤消功能:上下文,但仅当用户决定保存更改或轻松丢弃它们时,才将更改合并回“根”上下文。或者您可能想对整组对象进行一些后台处理。如果所有内容都在相同的上下文中运行,您最终会遇到同步问题。

关于ios - 单例 : Pros, 缺点,设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6809567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com