gpt4 book ai didi

Objective-C 替代使用 ApplicationDelegate 或单例来传递数据

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:50 26 4
gpt4 key购买 nike

我正在开发一个现有的 iOS 应用程序(在 App 商店中称为 Mazin,如果有人感兴趣的话),我正在尝试重新编写代码以避免使用 Application Delegate 或单例来共享信息/方法。特别是我要在某些 View 和 Controller 之间共享以下内容:

  • CoreData 对象,如 NSManagedObjectContext 和用于与数据交互的相关自定义方法
  • 说明在几个地方使用的属性,例如 currentMazeType、gameMode 和 soundIsMuted,以及一些广泛使用的特定于游戏的实用方法
  • 用于显示整个应用中常用信息的 View 和方法(例如,ActivityIndi​​cator 和在给定 View 上显示/隐藏它的方法)

一般来说,多个 View 和 ViewController 需要访问此信息的各个子集,我需要一种机制来在这些对象之间“全局”共享信息和方法。其中一些共享是为了方便(例如,每次我想显示一个基本事件指示器时,我只调用一个通用的“startActivityIndi​​cator”方法)但有些共享是必需的(例如,更改 gameMode 会“全局”更改它和几个 View / Controller 需要访问共模信息)。

哪种模式最适合这种要求?我有自己的解决方案,我会在下面发布以供您考虑/评论。

谢谢!

最佳答案

我正在考虑的解决方案:

我计划创建一些“实用程序”类(例如 GameDataUtil、AppStateUtil、GadgetsUtil),每个类都封装了“全局”信息和/或方法的适当子集。每个需要访问实用程序中的公共(public)信息/方法的 View 或 ViewController 都将具有该给定类型的适当属性(例如,可以发出声音的 View 需要访问 AppStateUtil 以便它可以确定声音当前是否静音) .

ApplicationDelegate 将是唯一生成“实用程序”类的单个实例并将这些实例传递给从其 Nib 加载的适当对象(在 applicationDidFinishLaunching 中)的类。这些 View / Controller 必须将所有必要的信息传递给它们可能以编程方式加载的任何成员(这可能会变得很麻烦——A 类可能需要 GagetsUtil 才能将其传递给 B 类的实例,即使 A 类从不直接使用该实用程序)。

这有点像从应用程序委托(delegate)向下注入(inject)依赖项(因为我没有依赖项注入(inject)容器的实用程序)。

现在,我考虑创建一个 super 实用程序(例如,ConfigUtil),它会为每个其他实用程序保留一个属性。 AppDelegate 将创建 super 实用程序的单个实例(使用它创建的其他实用程序的实例来设置它)。 AppDelegate 会将 uber-utility 实例传递给需要访问任何基本实用程序的任何人。每个基本实用程序仍然会封装通用数据/方法的一个子集,但是通过将每个实用程序中的一个放入 super 实用程序并传递它,我不必跟上哪个类需要哪个实用程序(不仅供自己使用,还可以传递给它的任何成员对象)。

关于Objective-C 替代使用 ApplicationDelegate 或单例来传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767476/

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