这种情况适合单身人士吗?

时间:2012-11-01 10:22:45

标签: iphone objective-c ios cocos2d-iphone

快速提问,我已经编程了Objective-c大约2个月了,但是我精通其他一些语言。

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

我有一个由多个其他类访问的单例,enemiesArray。这是在我的敌人类中,敌人是一些敌人特定类的直接父母。每个敌人特定的类在它自己的初始化期间访问initWithSpriteFile,这反过来又将敌人添加到enemiesArray单例中。

// 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;
}

1 个答案:

答案 0 :(得分:1)

敌人CCNode对象(如CCSprite)?然后将它们存储在单例中会带来内存泄漏的真正危险,因为在更改场景时您可能仍然保持对场景节点的引用。这将使前一场景保持在记忆中。您应该将该代码放在场景的类中。这里不需要使用单身人士。