【问题标题】:Creating a 'Player' object in a singleton class在单例类中创建“播放器”对象
【发布时间】:2011-07-15 21:22:25
【问题描述】:

我正在为一些纸牌游戏创建一个计算器。在那个游戏中,我正在创建一个 Singleton 类来管理游戏。它保存分数,跟踪游戏的位置等......

现在应用启动后,我会要求用户输入 4 个玩家的名字。之后,根据名称实例化 4 个玩家对象。我已经有一个名为“Player”的对象,因此将用他们的名字实例化 4 个玩家,并且一开始得分为 0。

现在我需要将这些玩家存储在我的单例类中。因此,我在类中创建了 4 个 Player 属性。但是我的问题是,在 Singleton 类中的 init 方法下,在:

if ((self = [super init])) {
    // set properties here
}

// set properties here 在哪里,我要写什么?我需要对那边的 Players 属性做些什么吗?

谢谢,

【问题讨论】:

    标签: iphone objective-c cocoa-touch ipad singleton


    【解决方案1】:

    除了返回共享实例之外,您无需执行任何操作。通常,单例的属性设置在您实例化它的任何类中。

    【讨论】:

      【解决方案2】:

      不,您不需要对它们做任何事情,尽管我可能会将它们设置为 nil

      【讨论】:

      • 由于我合成了这些播放器,在其他类中我可以执行以下操作:mySingletonClass.player1 = player1 true?
      • 你可以。语法将更像[SingletonClass sharedInstance].player1 = player1。当然不要忘记在你的其他类中释放变量以防止内存泄漏。
      【解决方案3】:

      也许我错了,但您的 AppDelegate 不是已经充当 Singleton 了吗?

      【讨论】:

      • 嗯.. 我想你可以这么说。但是让您的 AppDelegate 管理我希望它管理的事情是糟糕的设计。
      • 我同意 Nayefc 的观点。许多新的 iOS 程序员让他们的 App Delegate 运行应该在几个不同类中的代码。通常最好坚持每个类都有自己的功能,而不是创建一个处理所有事情的 Abomination 类。逻辑上分离你的代码可以更容易理解什么类运行什么代码,更容易维护,更容易改变。
      • 感谢@FreeAsInBeer 添加的详细信息。此外,Cocoa Touch 严重依赖于 MVC 和面向对象的编程,这都是关于分离的。一个单独的类来跟踪游戏并对其进行管理是最好的方法。
      • 我已经发布了一个关于 Singleton 和 Appdelegate 设计的问题,stackoverflow.com/questions/6708250/… 以更深入地讨论它。
      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      相关资源
      最近更新 更多