【问题标题】:iOS singleton with static data带有静态数据的 iOS 单例
【发布时间】:2012-08-21 10:48:07
【问题描述】:

我正在使用游戏中心并希望有一个单例类来访问我设置的 GK 功能,但我随后介绍了几个需要委托的方法。显然,委托不能真正与单例一起正常工作,但我希望/需要在此类中加载的数据加载一次并一直存在。

有没有一种很好的方法可以让我一直将数据保存在那里,但在需要时实例化该类?

【问题讨论】:

  • 为什么代理不能使用单例?
  • 是否需要实例化?不能使用类方法吗?
  • 好吧,我猜委托可以工作,我担心的是如果在给定时间有多个对象使用它,并且每个对象都设置一个委托,那么它会覆盖现有的委托,除非我添加我猜有多个代表。它不需要被实例化,不,我只是在 init 方法中检索了一些数据,我宁愿在那里而不是在调用其他方法之前调用单独的方法

标签: objective-c ios static singleton


【解决方案1】:

你说“单例类”,我假设你的意思是这个类只有类方法。没关系,你仍然可以使用它,因为类对象仍然是对象。也就是说,您可能需要维护状态。每个委托调用都会包含一些允许对象识别发送者的参数。

我自己可能会做的是在“初始化”方法中创建一个 NSMutableDictionary,然后在发送委托方法之前让对象注册自己,当它们注册时创建另一个 mutableDictionary,并将其保存在第一个与发送对象的密钥(或其他一些唯一标识符)。

每个委托调用都必须包含发送者,这样您就可以检索与该对象关联的字典。

【讨论】:

  • 单身我的意思是对象本身只被实例化一次。所以你有一个sharedManager 的静态方法,它返回一个对象的实例,但如果该对象之前已经实例化,它只返回那个对象。我不需要每个委托对象在单例中都有自己的数据,但单例本身需要包含数据。我担心有多个委托对象。我希望简单地设置单例的委托,而不是在每个方法调用中传递委托。也许有一组代表?
  • Apple 的委托方法几乎都包含调用对象,所以我建议这并不奇怪。许多人不需要存储状态信息,但如果你这样做,使用可变字典是一种很好的方法。如果可以共享此共享实例,您还需要确保线程安全。拥有多个对象也可以。
  • 是的,我有线程安全代码,所以应该没问题。我会想办法的。可能会传递委托。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多