2

私は ARC と Cocos2d 2.0 をスタティック ライブラリとして使用しています (これは ARC を使用せず、別のターゲットとしてコンパイルされます)。古いプロジェクト (ARC なしで作成) を翻訳しましたが、この方法でプロパティを宣言すると、保持サイクルの問題が発生する可能性があるかどうか疑問に思っています。

@interface PlayerData : NSObject <NSCoding> {
}


//Is ok to save this as if the game gets paused you may want to save this.
@property (readwrite, nonatomic) int numberOfHits;
@property (readwrite, nonatomic) bool everBeenHitInCurrentLevel;
@property (readwrite, nonatomic) int hitsForOneHearth;

私のさまざまなシーンが時間の経過とともに記憶を蓄積していることに気付きました. また、CCLayer メソッド (MyScene : CCLayer) の release メソッドに CCLOG 呼び出しを追加しましたが、呼び出されません。これがシーンの作成方法です (" [CCDirector sharedDirector] replaceScene " メソッドを使用して置き換えます)

+ (id) sceneWithLevelName:(LevelName)name
{
    CCScene *scene = [CCScene node];        
    ShooterScene * shooterLayer = [[self alloc] initWithId:name];
    [scene addChild:shooterLayer];


    return scene;    
}

編集: 私はばかげてオブジェクトの例を含めず、プリミティブ データ型のみを使用したことに気付いたので、シーンに要素のスニペットをいくつか貼り付けます: CharacterSelection、ShooterScene、PlanetSelectionMenu:

//ShooterScene
@interface ShooterScene : CCLayer {
    HudLayer * hudLayer;
    ....
}

@property(readwrite, nonatomic) CCSpriteBatchNode* backgroundAndEnemiesBatchNode;
@property(readwrite, nonatomic) ShipEntity* playerShip;
... etc..


Please note that I do not declare member variables for properties like playerShip and backgroundAndEnemiesBatchNode beause, as far as I can understand, should suffice the property declaration (but please correct me if I am wrong or if the approach may cause issues). 

//CharacterSelectionScene
@interface CharacterSelectionScene : CCLayer {
    int currentlySelectedCharacterSpriteTag;
    CCSprite * lights;
    CCLayer * spritesLayer;    
    ...
}

//PlanetSelectionMenu
#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface PlanetSelectionMenu : CCLayer {
    CCLayer * backgroundLayer; // Added background images here
    CCLayer * alwaysPresentItems;
}

+ (id) scene;

@end

PlanetSelectionMenuからCharacterSelectionSceneに移動するたびに、またはその逆に移動するたびに思い出が増えることに注意してください。ただし、この場合、プロパティは使用せず、オブジェクト (CCSprites) をレイヤーとバッチノードに追加しただけです。

編集 2: これは、Menu->CharacterSelection->PlanetSelectionScene などを実行しているときに割り当てに表示されるものです。平均すると、LiveBytes は 4MB であり、一度に 1 つのシーンしか表示されないため、何もないと仮定しますサイクルを保持します。それでは、なぜこれらの厄介な LOW メモリ メッセージが表示されるのでしょうか?

ここに画像の説明を入力

4

1 に答える 1