Cocos2d iphone 关于在共享实例中保留游戏层

Cocos2d iphone 关于在共享实例中保留游戏层,cocos2d-iphone,Cocos2d Iphone,我在多层次应用程序的互联网示例中发现(类似于选择层次时割断绳索) 有一个共享的实例对象,NSObject是游戏大脑,游戏逻辑存储在这里 @interface GameData : NSObject { ObjLevelInfo *levelInfoArray[MAX_LEVEL_NUMBER]; // array to store level info int _curLevelIndex; // current playing level number

我在多层次应用程序的互联网示例中发现(类似于选择层次时割断绳索)

有一个共享的实例对象,NSObject是游戏大脑,游戏逻辑存储在这里

    @interface GameData : NSObject {

    ObjLevelInfo *levelInfoArray[MAX_LEVEL_NUMBER]; // array to store level info
    int _curLevelIndex;         // current playing level number, local
    int _curScore;              // current score, local
    CCLayer *_curGameLayer;     // link to current Game Layer, local

}

@property (nonatomic) int curLevelIndex;             // current playing level number
@property (nonatomic) int curScore;                  // current score
@property (nonatomic, retain) CCLayer *curGameLayer; // link to current Game Layer
curGameLayer用于存储当前运行层

还有几个游戏场景层类。 在这些类的init方法中,我发现

-(id) init
{
    if( (self=[super init])) {

        //make sure you call this to correctly link GameData with this game layer
        [[GameData sharedInstance] setCurGameLayer:self];
...
每次加载新场景时都会发生这种情况,我想知道这是否是泄漏源?当游戏数据保留新场景时,是否会从内存中删除该场景

更新:

如果我删除
@property(非原子,保留)CCLayer*curGameLayer属性和
[[GameData sharedInstance]setCurGameLayer:self]此链接,并安装在游戏数据使用中

CCScene* runningScene = [CCDirector sharedDirector].runningScene;
MyScene* gameScene;

并使用类似于
(MyProgressBar*)[GameSecene getChildByTag:progressBarTag]的东西要访问当前正在运行的场景节点,是否仍然存在问题?

否,除非游戏层被明确释放,否则它将保留在内存中。如果启用了ARC,则将该属性设置为nil就足够了。这是使用这种全局游戏状态方法的一个严重危险,将这种方法教给初学者是一个可怕的想法。根据经验,永远不要在不是节点本身的对象中保留节点,也不要保留任何父节点或同级节点,仅保留子节点或孙子节点。这是为了避免保留周期。

非常感谢您的回答。这是非常糟糕的,不幸的是,我在这方面做了大量的工作:(有没有办法添加一些代码、检查和更正来正确运行此方案?错误的方案?我的项目中启用了ARC。