使用CCSpriteBatchNode进行延迟加载的正确方法是什么?

时间:2012-08-25 09:02:19

标签: objective-c cocos2d-iphone

我做了一个getter这样做:

@synthesize sheet = _sheet;

-(CCSpriteBatchNode *)sheet {
    if (!_sheet) {
        _sheet = [CCSpriteBatchNode batchNodeWithFile:@"image.png" capacity:500];
        [self addChild:_sheet];
    }
    return _sheet;
}

但我的问题是,宣布这个属性的正确方法是什么?

在我的界面中,我已经完成了:

@property (readonly, unsafe_unretained) CCSpriteBatchNode *sheet;

因为我认为,因为这是“只读”,所以我不需要强烈的参考 - 但后来我感到困惑和思考 - 等待这意味着它有可能会被释放,这应该坚强吗?我使用unsafe_unretained而不是weak来支持iOS4 ...

1 个答案:

答案 0 :(得分:0)

“readonly”属性表示没有setter函数来修改属性的值。这与“强”与“弱/不安全”无关。

您应该声明属性“strong”以确保在某人使用时不释放该对象。

在您的特定情况下,由于self_sheet可能会保留[self addChild:_sheet],因此_sheet至少与self一样长。但是,如果您将该属性声明为“unsafe_unretained”,而另一个类通过

获取该值
CCSpriteBatchNode *theSheet = yourWhatEver.sheet;

一旦theSheet被释放,yourWhatEver将成为无效指针。