您還沒有真正定義的變量,你只定義一個財產(其隱含地定義一個變量,它是私有的)。由於屬性只是方法,你需要點語法。請注意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