objective-c – 如何在Cocos2d中使用ARC保存对子节点的引用

我有一个自定义的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拥有对场景图中所有节点的强引用,因此它将为您保留.

这并不意味着每个节点都应该存储为弱节点,有时您希望节点如果不在场景图中则会挂起.

点赞