0

我有一个 GameScene 类,在初始化期间我制作了一个场景并将一个孩子附加到它 - 一个层。我注意到它的奇怪代码:

    CCScene *scene = [CCScene node];
    CCLayer *layer = [GameScene node];
    [scene addChild:layer];

为什么不这样做呢?

CCLayer *layer = [CCLayer node];

这不会增加可读性,还是我在这里遗漏了一些基本的东西?另外,为什么不使用 alloc init 呢?

4

1 回答 1

2
[CCNode node];

是一个静态(类)方法。它会自动调用[[[self alloc] init] autorelease];

任何 CCNode 子类都可以使用这个静态初始化器进行初始化。它基本上是为了方便,实际上不需要。(虽然,就像我说的,很高兴拥有)。

类方法使用“+”号,实例方法使用“-”号。类方法类似于 Java 中的静态方法。可以在不创建该类的实例的情况下调用它们。它可能看起来像这样:[YourClass doSomething]; //Doesn't need an instance of YourClass

实例方法需要其类的实例才能运行。这看起来像:

YourClass *yClass = [[YourClass alloc] init];
[yClass doSomethingElse]; //Needs an instance of YourClass

我没看过,但我认为该node方法看起来像这样:

+ (CCNode*)node {
    return [[[self alloc] init] autorelease];
}

奇怪的声明只是返回一个场景(使用静态初始化程序初始化),其中您的自定义层作为子层,然后 CCDirector 可以使用和显示。

编辑:我觉得会增加清晰度。

奇怪的声明只是一个+ (CCScene*)scene返回场景的静态初始化程序。

于 2012-07-23T17:22:28.020 回答