关于iOS:iOS – 澄清类和实例方法

iOS - Clarifying class and instance methods

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

举例来说,假设我正在创建一个游戏,其中包含一个地图和该地图上的各个图块(例如,16 x 16图块)。

每一块瓷砖都可以由建筑物、树木、道路等组成,这在整个游戏中都可以改变。

我是否正确地用类方法设置一个映射类来初始化映射,仅仅是因为只有一个映射,我不需要实例化多个映射?

我是否也可以用实例方法设置一个tile类来初始化tiles,因为每个tiles都有256个属性?

我努力想把这一切都解决掉,任何建议都会非常感谢。


处理这个问题有多种模式,但基本上可以归结为Map类是一个单例类。有些人更喜欢通过禁止创建多个实例(例如,通过隐藏构造函数或使构造函数引发异常等)来强制类的单一性。在其他情况下,只需将Map类记录为一个单独的类,并以此来使用它就足够了。

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

1
2
3
4
5
static Map* defaultMap = nil;
+ (Map*) defaultMap {
    if(!defaultMap) defaultMap = [[Map alloc] init];
    return defaultMap;
}

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


映射类可以实现为单例模式。或者任何其他限制它仅限于1个共享实例的方法。