¿Cuál es la forma correcta de realizar una carga diferida con un CCSpriteBatchNode?
Frecuentes
Visto 73 veces
0
Hice un getter hacer esto:
@synthesize sheet = _sheet;
-(CCSpriteBatchNode *)sheet {
if (!_sheet) {
_sheet = [CCSpriteBatchNode batchNodeWithFile:@"image.png" capacity:500];
[self addChild:_sheet];
}
return _sheet;
}
Pero mi pregunta es, ¿cuál es la forma correcta de declarar esta propiedad?
en mi interfaz, he hecho:
@property (readonly, unsafe_unretained) CCSpriteBatchNode *sheet;
porque pensé, dado que esto es "solo lectura", no necesito una referencia fuerte a él, pero luego me confundí y pensé, espera, ¿eso significa que hay una posibilidad de que se publique, y esto debería ser fuerte? Usé unsafe_unretained en lugar de débil para tener soporte para iOS4...
1 Respuestas
0
La propiedad "solo lectura" significa que no hay una función de establecimiento para modificar el valor de la propiedad. Eso no tiene nada que ver con "fuerte" versus "débil/inseguro_no retenido".
Debe declarar la propiedad "fuerte" para asegurarse de que el objeto no se libere mientras alguien lo está usando.
En tu caso particular, self
probablemente retiene _sheet
porque [self addChild:_sheet]
, asi que _sheet
existirá al menos mientras self
. Pero si declara la propiedad como "unsafe_unretained" y otra clase obtiene el valor a través de
CCSpriteBatchNode *theSheet = yourWhatEver.sheet;
luego theSheet
será un puntero inválido tan pronto como yourWhatEver
está desasignado.
Respondido 25 ago 12, 10:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas objective-c cocos2d-iphone or haz tu propia pregunta.