【问题标题】:Can a class method singleton object respond to a delegate call?类方法单例对象可以响应委托调用吗?
【发布时间】:2013-03-11 13:44:56
【问题描述】:

我有一个 SettingsManager 单例,它处理整个应用程序中的用户设置(例如,每当在任何视图控制器中播放声音时,都会检查 SettingsManager 以查看声音是否打开以及音量是多少) .

该类对象(我使用[SettingsManager sharedManager] 访问)能否响应发送到其他地方的委托消息?例如,如果我在 SettingsViewController 中打开声音,类方法对象可以拾取并保存这些更改到磁盘吗?

【问题讨论】:

  • 最简单的方法是从适当的位置调用 SettingsManager 的保存数据方法,无论这是否是委托回调。
  • @AaronBrager 是单例,sharedManager 是类方法,不是实例方法。我不能在上面调用其他方法,可以吗?
  • sharedManager 是一种返回对象的一个​​实例(唯一实例)的类方法。你的单例仍然是一个可以有属性、方法等的实例。
  • 它看起来像[[SettingsManager sharedManager] saveData];,你的 .h 文件中有 - (void) saveData;
  • 您没有在类方法上调用实例方法。您正在对类方法返回的实例化对象调用实例方法。

标签: ios objective-c delegates singleton class-method


【解决方案1】:

你的单例,一旦被实例化,当然可以充当代理。最后,它也是一个像任何其他对象一样的对象。它唯一的区别是它只被实例化一次。

但是,如果你只通过类方法访问它,并且没有在属性、ivars等中存储任何数据,那么它可能根本不会被实例化。我不确定在这种情况下它是否是一个真正的单例,但我看到人们称它为单例,尽管它从未被实际实例化。在这种情况下,在类方法中,self 总是引用类而不是实例。并且一个类不能充当代表。

所以,根据你的单身人士的样子,答案是肯定的或否定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2020-06-22
    • 2020-10-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多