Cocos2d iphone 关于在共享实例中保留游戏层
我在多层次应用程序的互联网示例中发现(类似于选择层次时割断绳索) 有一个共享的实例对象,NSObject是游戏大脑,游戏逻辑存储在这里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
@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。