1

次のコードを見てください。

    CCSprite* testsprite = [CCSprite spriteWithFile:@"test.png"];
    CCLOG(@"1. count: %d", [testsprite retainCount]);
    [self addChild:testsprite];
    CCLOG(@"2. count: %d", [testsprite retainCount]);
    [testsprite runAction: [CCMoveTo actionWithDuration:3.0 position:CGPointMake(200.0, 200.0)]];
    CCLOG(@"3. count: %d", [testsprite retainCount]);

このコードの出力は次のとおりです。

1. count: 1
2. count: 2
3. count: 3

ここで何が起こっているのか理解できたと思います。質問は次のとおりです:(どのメソッドで)Cocos2Dがオブジェクト(この場合はtestsprite)を保持する場合の経験則はありますか?

さようなら、クリスチャン

4

2 に答える 2

2
  1. 自動リリースされるため、可能であればクラス関数を使用してください。
  2. addChildを使用してCCNodeを追加すると、ノードが保持されます。割り当ての初期化を行った場合は、子として追加した後に解放します
  3. 配列に何かを追加すると、オブジェクトが保持されます。オブジェクトを配列に追加すると、オブジェクトを安全に解放できます。

自動リリース:

CCSprite *sprite = [CCSprite spriteWithFile:@"icon.png"];

手動メモリ管理

CCSprite *sprite = [[CCSprite alloc] initWithFile:@"icon.png"];

保持カウントがあなたを混乱させないでください。コードの各行は、オブジェクトを保持している可能性があります。それがうまく行われている場合、基礎となるコードはそれが終了した後に自動的にそれを解放します。

releaseと入力する必要がある場合の一般的な例。

NSMutableArray *units = [NSMutableArray array];
for (int i = 0; i < 42; i++)
{
    CCNode *unit = [[MyUnit alloc] init]; // retain +1
    [units addObject:unit]; // retain +1
    [unit release]; // retain -1
}
于 2012-06-24T18:17:45.683 に答える
1

ルールは他のCocoaコードの場合と同じです。必要なときに何かを保持します。使い終わったらリリースします。

また、このretainCount方法は一般的に役に立たない

于 2012-06-24T17:50:50.150 に答える