¿Cuál es la forma correcta de realizar una carga diferida con un CCSpriteBatchNode?

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

preguntado el 25 de agosto de 12 a las 10:08

1 Respuestas

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 or haz tu propia pregunta.