He leído la guía de gestión de memoria de Apple y no veo dónde se explica este caso ...¿Qué hace Objective-C en realidad cuando declaras un objeto?
Muchas veces, especialmente cuando escribo un método de clase para devolver una instancia de una clase, comenzaré de esta manera, porque así es como lo he visto y funciona.
[NOTA] Este código es de memoria - Lo actualizaré cuando llegue a casa para mostrar un ejemplo que realmente funciona (lo hice para ilustrarlo, pero obviamente no lo recuerdo lo suficientemente bien como para construirlo . algo que tiene sentido ...
[EDIT] Aquí está mi método actual - por supuesto, todo el mundo era correcto que debo estar llamando alloc
que estoy
+ (id)player
{
Player *player = nil;
if ((player = [[[super alloc] initWithFile:@"rocket.png"] autorelease])) {
[player setProjectileType:kProjectileBullet];
[player setProjectileLevel:1];
[player setInvincible:YES];
[player setEmitter:[CCParticleSystemQuad particleWithFile:@"exhaust.plist"]];
[[player emitter] setPosition:ccp(0.0, player.contentSize.height/2)];
[player addChild:player.emitter];
}
return player;
}
Así que lo que obtuve de las respuestas es: * Declarar la instancia solo me da un puntero a una ubicación de memoria y le dice a Xcode qué clase será el objeto. * Ajuste del puntero a cero prácticamente sólo lo pone a cero - evitando que tener la basura en ella (? Derecha) * Ya que estoy autoreleasing la instancia, el objeto que se devuelve es también autoreleased.
Gracias por ayudarme a entender esto!
¿Dónde ha visto lo anterior "hecho?" El código que ha enumerado aquí no tiene sentido, y no espero que funcione. –
@Rob - ver mi edición arriba; Voy a editar con el código actual esta noche. Gracias por ser paciente. – Steve