-1

簡単な質問ですが、objective-c をプログラミングして約 2 か月になりますが、他の多くの言語にも精通しています。

次の状況がシングルトンに適しているかどうかを知りたいのですが、そうであれば、現在のコードよりもシングルトンの初期化を処理する適切な方法はありますか?

私は、他の多数のクラスからアクセスされるシングルトンのenemensArrayを持っています。これは私の Enemy クラスにあります。敵は、いくつかの敵固有のクラスの直接の親です。敵固有の各クラスは、それ自体の初期化中に initWithSpriteFile にアクセスします。これにより、敵がenemensArrayシングルトンに追加されます。

// 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 に答える