En realidad no se ha definido una variable, es definido un propiedad (que define implícitamente una variable que es privado). Y como la propiedad es solo un método, necesita la sintaxis de punto. Tenga en cuenta que self.property
es lo mismo que [self property]
.
Para solucionar esto, especifique una variable. Le daré un ejemplo donde la variable tiene un nombre diferente al de la propiedad. La mayoría de las personas eligieron el mismo nombre para ambos, pero me gustaría que sean diferentes, así que de inmediato veo cuál se refiere.
// a.h
@interface MyClass : NSObject {
// Instance variables are "protected" by default, except if you
// use @private or @public.
Object *myObjectVar;
}
@property (nonatomic, retain) Object *myObject;
@end
// a.m
@implementation MyClass
@synthesize myObject = myObjectVar;
@end
// b.h
@interface AnotherClass : MyClass
@end
// b.m
@implementation AnotherClass
- (void) someMethod {
// works
Object *obj = myObjectVar;
// works
obj = self.myObject;
// the same as self.myObject
obj = [self myObject];
}
@end
nota la diferencia cuando se asigna : si se asigna a la variable de objeto no se conserva automáticamente. Pero se mantiene si se utiliza la propiedad:
myObjectVar = someObject; // not retained, old object not released!
self.myObject = someObject; // old object released, new object retained
[self setMyObject:someObject]; // same as the line above
Editar: mencionó que las variables de instancia sintetizados son privados por defecto, como se ha señalado por @ Jason Coco. Y @NSGod tiene razón en que las variables de instancia normales son protegidas de forma predeterminada en lugar de pública, se corrigió eso.
Esto se explica por la respuesta de [Kevin Ballard] (http://stackoverflow.com/a/8511046/) a [¿Cuál es la visibilidad de ivars sintetizados?] (Http://stackoverflow.com/questions/8510464/) desde hace unas horas. –