, sadece (örtük anlamda özel bir değişkeni tanımlar) bir özelliği tanımladı. Ve özellik sadece yöntem olduğundan, nokta sözdizimine ihtiyacınız var. self.property
'un [self property]
ile aynı olduğunu unutmayın.
Bunu düzeltmek için, bir değişken belirtin. Değişkenin mülkten farklı bir adı olduğu bir örnek vereceğim. Çoğu insan aynı adı hem seçti, hem de farklı olduklarını görmek için, hangisinin kastedildiğini hemen görüyorum.
// 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
Not atamak farkı: Eğer nesne otomatik olarak tutulmaz sizin değişkene atarsanız.
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
Düzenleme
: @Jason Coco tarafından belirtildiği gibi, sentezlenen örnek değişkenler varsayılan olarak gizli olduğu Söz Ama bu özelliğini kullanıyorsanız korunur. Ve @NSGod, normal örnek değişkenlerinin varsayılan olarak korumalı varsayılan değil, varsayılan olarak doğru olduğunu doğru.
Bu kadar [Kevin Ballard'ın yanıtı] (http://stackoverflow.com/a/8511046/) ile açıklanabilir [sentezlenmiş Ivars görünürlüğü nedir?] (Http://stackoverflow.com/questions/8510464/) birkaç saat önce. –