首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正确地使用了Singleton方法吗?(iOS游戏开发没有)

我正确地使用了Singleton方法吗?(iOS游戏开发没有)
EN

Stack Overflow用户
提问于 2011-10-05 16:52:59
回答 2查看 272关注 0票数 0

我刚开始使用单数,我只想评估我是否正确地使用了它。我读过单身汉是邪恶的。我只从游戏开发开始,所以像单元测试和多线程这样的东西还没有到达我的手中。

我把游戏的逻辑划分成不同的模块。每个模块都有一个单例类和非单例类(例如。数据模型)。我使用单例作为中介,这样它就可以与其他模块交互。这允许我与其他人一起工作,因为它是可管理的,而且我只需要公开我的单例的助手方法。他不需要知道我是怎么实现的。

我做的对吗?

示例:

  • 在传统的日本SRPG游戏(如FFTactics)中,tilemap的单元格/网格有自己的模块。
  • 所有的精灵都是由一个AssetManager (一个单例)生成的,它根据设备的分辨率(可用性和分辨率)自动对精灵进行定级。这仅仅是通过调用单例.

中的一个方法来完成的。

EN

回答 2

Stack Overflow用户

发布于 2011-10-05 17:32:36

我绝对不同意单身人士是邪恶的。他们有时被过度使用,也许,但在某些情况下,只是完美的工作。在某些应用程序中,有某种通用数据管理器是有意义的。单例模式在SDK本身中被广泛使用(应用程序委托、共享管理器、默认中心等等)。大多数情况下,这些都不是“纯”的单例,因为您可以访问共享实例,但也可以在必要时创建新实例。

您需要问自己的问题是,在任何时候从任何地方访问数据管理器的单个实例是否有用,如果不是,那么可能不需要单例。但是,如果要在多线程环境中使用单线程,则确实需要担心争用条件(一个线程可以修改资源,而另一个线程正在访问它),文档对如何在Cocoa中最好地实现这一点有很好的解释。

票数 1
EN

Stack Overflow用户

发布于 2011-10-05 17:10:57

您也可以通过实例轻松地做到这一点。

假设您有一个GameMap类和一个Tile类。GameMap表示Tile对象的二维网格。(这是您的FFTactics示例)。

代码语言:javascript
复制
GameMap *gameMap = [[GameMap alloc] init];
NSArray *theTiles = gameMap.tiles;

GameMap的实例拥有瓷砖网格,并在创建游戏地图时创建瓷砖。不需要单身人士。

你可能会说:“但我一次只有一个GameMap,有什么大不了的?”如何加载保存的游戏,或加载新的水平?好吧,这就像:

代码语言:javascript
复制
// In whatever class object owns the game map
self.gameMap = [[GameMap alloc] initWithSaveData:saveData];

最后,创建一个类的实例,该类具有管理其他事物实例的代码。保持尽可能少的全局,您的代码将更加可伸缩和可维护。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7664842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档