ios - 在 Objective C 中使用静态变量来引用类的实例?

标签 ios objective-c

我是 Objective C 的新手,这可能是一个有点蹩脚的问题,但是:

我正在尝试制作一个iOS游戏,其中有一个类“Monster”,它每秒左右生成一个新的Monster实例,我希望能够跟踪每个Monster以便使用/以某种方式操纵它。

目前我正在尝试为每个怪物颁发一个唯一的 ID,

例如这样的事情:

//Incorrect Syntax ... 
Class Monster extends CCSprite

    public static global_id = 0;
    public instance_id;

    init() {
           instance_id = global_id;
           global_id ++;
    }

我如何在 Monster 类的头文件/实现文件中管理它? 在 Objective-C 中,“静态”似乎“不存在”。

最佳答案

您通常可以通过以下方式解决该问题:

  • 坚持每个源文件一个类的规则;
  • 在该文件中放置合适的全局变量;
  • 将全局变量标记为static,在 C 语言中,这意味着“无法从该编译单元外部访问”(如果您不走出自己的编译单元,则一个源文件就是一个编译单元)与预处理器的方式)。

所以,界面:

@interface AEMonster: CCSprite
@property (nonatomic, readonly) int instanceID;
@end

实现:

static int globalID = 0;

@implementation AEMonster

- (instancetype)init
{
    self = [super init];

    if(self)
    {
        _instanceID = globalID;
        globalID ++;
    }

    return self;
}

@end

关于ios - 在 Objective C 中使用静态变量来引用类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746991/

相关文章:

ios - init 的 Swift 协议(protocol)扩展自引用问题

ios - 向圆圈添加模糊阴影

ios - 更改NSMutableDictionary中NSNumber的值

ios - iOS,如何为有趣的应用程序划粗线?

iphone - iOS - 在特定时间覆盖特定录音

ios - 错误 "HTML tag ' ul' 需要结束标记 FIREventNames.h"

ios - Xamarin 表单 - IOS : How to detect the UIView size changed

ios - 在 iOS Swift 4 中重置 FCM 角标(Badge)计数

ios - 使用 Xamarin 调试 iOS 扩展

objective-c - 我们可以将类方法(以+号开头)与该类的实例一起使用吗