我做了一个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 ...
答案 0 :(得分:0)
“readonly”属性表示没有setter函数来修改属性的值。这与“强”与“弱/不安全”无关。
您应该声明属性“strong”以确保在某人使用时不释放该对象。
在您的特定情况下,由于self
,_sheet
可能会保留[self addChild:_sheet]
,因此_sheet
至少与self
一样长。但是,如果您将该属性声明为“unsafe_unretained”,而另一个类通过
CCSpriteBatchNode *theSheet = yourWhatEver.sheet;
一旦theSheet
被释放,yourWhatEver
将成为无效指针。