-1

快速提问,我已经编写objective-c 大约2 个月了,但是我精通许多其他语言。

我想知道以下情况是否适合单例,如果是,是否有比我当前的代码更合适的方式来处理单例的初始化?

我有许多其他类可以访问的单例、敌人数组。这是在我的敌人类中,敌人是许多敌人特定类的直接父级。每个特定于敌人的类在它自己的初始化期间访问 initWithSpriteFile,这反过来又将敌人添加到enemysArray 单例中。

// Singletons
static NSMutableArray *enemiesArray;

// Methods
+(NSMutableArray *) sharedEnemies
{
    if (!enemiesArray) { enemiesArray = [[NSMutableArray alloc] init]; }
    return enemiesArray;
}

+(id) initWithSpriteFile:(NSString *) spriteFile;
{
    if (!enemiesArray) { enemiesArray = [[NSMutableArray alloc] init]; }

    if ((self = [super spriteWithFile:spriteFile])) {
        [enemiesArray addObject:self];
    }
    return self;
}
4

1 回答 1

1

敌人是 CCNode 对象(如 CCSprite)吗?然后将这些存储在单例中会带来非常真实的内存泄漏危险,因为在更改场景时您可能仍然持有对场景节点的引用。这将使之前的场景留在记忆中。您应该将该代码放在场景的类中。这里不需要使用单例。

于 2012-11-01T10:36:38.293 回答