在Objective-c中继承实例变量
发布时间:2020-12-16 05:48:36 所属栏目:百科 来源:网络整理
导读:在 Objective-c 2.0中为什么子类需要使用self关键字引用父类中的实例变量? 考虑这个例子: // a.h@interface MyClass : NSObject@property (nonatomic,retain) Object *myObject;@end// a.m@implementation MyClass@synthesize myObject;@end// b.h@interfa
|
在
Objective-c 2.0中为什么子类需要使用self关键字引用父类中的实例变量?
考虑这个例子: // a.h
@interface MyClass : NSObject
@property (nonatomic,retain) Object *myObject;
@end
// a.m
@implementation MyClass
@synthesize myObject;
@end
// b.h
@interface AnotherClass : MyClass
@end
// b.m
@implementation AnotherClass
- (void) someMethod {
// error
// Object *obj = myObject;
// works
// Object *obj = self.myObject;
}
@end
解决方法
您实际上没有定义一个变量,您只定义了一个属性(隐式定义了一个非私有变量).由于属性只是方法,您需要点语法.请注意,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是正确的,正常的实例变量是默认而不是公共的,固定的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
