Lo siguiente no se queja en la compilación ni en el tiempo de ejecución sobre no name
ivar. Entonces, ¿por qué es tan común ver un ivar y@property/@synthesize
.¿Cuál es el propósito de un ivar cuando existe una propiedad?
@interface PropTest : NSObject
{
}
@property (retain) NSString *name;
@end
@implementation PropTest
@synthesize name;
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
PropTest *p = [[PropTest new] autorelease];
p.name = @"Hello, World!";
NSLog(@"%@",p.name);
[pool drain];
return 0;
}
impresiones de este código
Hello, World!
De hecho, si tengo acceso p->name
, recibo una advertencia:
warning: instance variable 'name' is @private; this will be a hard error in the future
lo que indica que se crea una Ivar para mí si uno doesn' t existe.
Si eso es cierto, ¿de qué sirve crear el ivar manualmente (ignorando lo obvio, que a veces hay razones válidas para no usar el accesorio g/setter)?
O preguntó de manera diferente, debo solamente siemprecrear una Ivar una propiedad cuando necesito pasar por alto los descriptores de acceso?
Creo que como Cris dijo que hay algunos problemas con no declarar ivars. La depuración es con la que me encuentro bastante a menudo. – Ian1971