Вы на самом деле не определили переменную, вы только определили свойство (которое неявно определяет переменную, которая является закрытой).А так как свойство это просто метод, вам нужен точечный синтаксис.Обратите внимание, что self.property
совпадает с [self property]
.
. Чтобы исправить это, укажите переменную.Я приведу пример, в котором переменная имеет имя, отличное от свойства.Большинство людей выбирают одно и то же имя для обоих, но мне нравится, когда они различаются, поэтому я сразу вижу, какое из них подразумевается.
// 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
Обратите внимание на разницу, когда вы назначаете : если вы назначаетеВаша переменная объект не сохраняется автоматически.Но оно сохраняется, если вы используете свойство:
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
Редактировать: Упомянуто, что синтезированные переменные экземпляра по умолчанию являются закрытыми, как отметил @Jason Coco.И @NSGod прав, что обычные переменные экземпляра защищены по умолчанию, а не public, исправили это.