我有一个自定义的CCNode类,它有一堆子节点,我想保留对子节点的引用,以便进行一些自定义转换.
例如,对于子背景,自定义类看起来像这样:
@interface MyNode : CCNode
@property (nonatomic, strong) CCNode *background;
@end
@implementation
- (void)setBackground:(CCNode *)background {
if (_background) {
[self removeChild:_background];
}
if (background) {
[self addChild:background];
}
_background = background;
}
- (void)runTransition {
if (_background)
[_background runAction:[…]];
}
@end
问题是这会导致ARC上的保留周期,节点后台永远不会从内存中释放.
最佳答案 内存管理没有硬性规则.您需要查看代码并确定最佳使用方法.
在你的情况下,虽然你只有一个背景,你可以让这个属性变弱. Cocos2d拥有对场景图中所有节点的强引用,因此它将为您保留.
这并不意味着每个节点都应该存储为弱节点,有时您希望节点如果不在场景图中则会挂起.