您还没有真正定义的变量,你只定义一个财产(其隐含地定义一个变量,它是私有的)。由于属性只是方法,你需要点语法。请注意0与[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可可注意但如果你使用属性保留。而@NSGod是正确的,默认的实例变量是保护默认,而不是公开,固定的。
这是[Kevin Ballard的回答](http://stackoverflow.com/a/8511046/)解释为[合成ivars的可见性是多少?](http://stackoverflow.com/questions/8510464/) )从几个小时前。 – 2011-12-14 21:46:43