我注意到,如果将某些声明放在头文件中的某些位置,则会出现编译错误。我已经在代码中添加了一些注释,以说明我认为某些情况。他们正确吗?

@interface Level : CCNode {
    //Instance variables?
    PlayBackgroundLayer* playBGLayer;
    PlayUILayer* playUILayer;
    PlayElementLayer* playElementLayer;
}

//Static methods?
+(void) InitLevel: (int) levelNumber;
+(Level*) GetCurrentLevel;

//Property declarations for instance variables?
@property (nonatomic, retain) PlayBackgroundLayer* playBGLayer;
@end

//Static variables?
Level* currentLevel;
PlayTilemapLayer* playTilemapLayer;

最佳答案

除了一项之外,您在所有方面都是正确的。您的最后一个变量不是静态变量,而是全局变量。静态变量只是使用static关键字声明的变量,它们的含义与其他语言略有不同。它们不是类变量,它们是变量,它们仅对声明它们的文件可见,并且只有在声明它的范围内才可见(如果在函数内部声明,则其他函数将看不到它)。但是,正如您期望的那样,无论您有多少实例,它们都只会被声明一次。如果您像以前那样在接口(interface)外部声明某些内容而没有使用static关键字,则其他类将导入它们。但是,这不是完成此操作的理想方法(如果有多个类导入此 header ,则可能会出现重新定义错误)。

另外,有一点需要注意的是,属性不需要具有显式的后备变量(如果使用@synthesize关键字,则编译器将为您创建一个后备变量),但是当然,如​​果您希望一个变量没有错。

最后,您应该注意,静态方法类方法不是实例方法的唯一原因是因为它们以加号(+)字符开头,而不是减号(-)字符。

关于objective-c - header 中应放置各种变量和方法类型的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11007057/

10-11 22:55
查看更多