0

我做了一个吸气剂:

@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...

4

1 回答 1

0

“readonly”属性意味着没有setter函数来修改属性的值。这与“strong”与“weak/unsafe_unretained”无关。

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

在您的特定情况下,可能会因为self保留,所以至少会存在。但是,如果您将属性声明为“unsafe_unretained”并且另一个类通过_sheet[self addChild:_sheet]_sheetself

CCSpriteBatchNode *theSheet = yourWhatEver.sheet;

那么theSheet一旦yourWhatEver被释放,它将是一个无效的指针。

于 2012-08-25T09:16:37.827 回答