我只是无法弄清楚这个保留周期,如果有人能帮助我发现它,我将不胜感激。
我有一个RootController
对象对 a 有很强的引用RootView
。
@interface RootController : CCNode <TouchDelegate, GUIDelegate, ModelViewDelgate>
...
@property (nonatomic, weak) CCDirector *director;
@property (nonatomic) RootView *view;
...
@end
@implementation
- (id)init {
...
_view = [[RootView alloc] initWithController:self];
[self addChild:_view];
...
}
return self;
}
@end
我有一个RootView
对象,它包含对控制器的引用,以及一个activeGame
,使我能够在游戏类型之间进行交换,而无需知道除了它符合<TouchDelegate>
协议之外的细节:
@interface RootView : CCScene
...
@property (nonatomic, assign) RootController *controller;
@property (nonatomic) GameplayLayer <ModelViewDelgate> *activeGame;
...
@end
@implementation RootView
- (id)init {
...
self.activeGame = [[GameplayLayer alloc] initWithDelegate:_controller root:self type:type];
[self addChild:self.activeGame];
...
}
return self;
}
@end
最后,我有 GameplayLayer,它在必要时由 RootView 调用,应该由 RootView 释放:
@interface GameplayLayer : CCLayer <ModelViewDelgate, Updatable>
...
@property (nonatomic, assign) RootView *rootView;
@property (nonatomic, assign) RootController <TouchDelegate> *touchDelegate;
...
@end
当控制器类决定是时候清理游戏(通常是游戏的硬重置)时,实际上我项目中的所有其他类都被释放,除了这个 GameplayLayer,它从不接收 dealloc 方法。我错过了什么?这是我如何“重新开始”我的游戏...
[[CCDirector sharedDirector] replaceScene:[RootController node]];