iOS - 澄清类和实例方法

时间:2013-02-04 01:22:51

标签: ios class static instance

我只是想确保我正确使用类方法。

举例来说,假设我正在创建一个涉及该地图上的单个地图和单个图块的游戏(例如,16 x 16个图块)。

每个瓷砖可以由建筑物,树木,道路等组成 - 这可以在整个游戏中发生变化。

我是否可以正确设置一个带有类方法的Map类来初始化地图,只是因为只有一个地图而我不需要实例化多个地图? / p>

使用实例方法设置Tile类以初始化切片时,我是否也是正确的,因为每个都有256个切片,每个切片都有自己的属性?

努力让我全神贯注,任何建议都会受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

有多种模式可以解决这个问题,但基本上归结为Map类是单身。有些人喜欢通过禁止创建多个实例来强制执行类的单例(例如,通过隐藏构造函数,或使构造函数抛出异常等)。在其他情况下,只需将Map类记录为单例并将其用作原则即可。

在Objective-C中处理单例的一种简单方法是创建一个实例化它的类方法,即:

static Map* defaultMap = nil;
+ (Map*) defaultMap {
    if(!defaultMap) defaultMap = [[Map alloc] init];
    return defaultMap;
}

对地图使用类方法可能不是一个好主意,就像全局变量通常应该减少到最小程度一样(尽管上面的例子实际上是一个全局变量,重构起来会容易得多)一旦你需要多个地图,你的代码。)

答案 1 :(得分:0)

Map类可以实现为singleton pattern。或者将其限制为仅1个共享实例的任何其他方式。