成为ObjectiveC的新手我正在尝试使用super关键字。我想知道super关键字是否仅用于调用基类方法。 请考虑以下代码
@interface foo_base : NSObject
{
int int_ivar;
}
-(void) base_method;
-(void) shared_method;
@end
@interface foo_der : foo_base
-(void) der_method;
-(void) shared_method;
@end
如果我尝试这样做,shared_method
的实施
@implementation foo_der
- (void) shared_method
{
[super shared_method]; //Works ok call base class method
int_ivar =23; //Works ok (Access base class ivar)
self->int_ivar = 23; //Works ok (Access base class ivar)
super->int_ivar=23; //Error- Why ? is super only limited to methods?
}
...
...
@end
super关键字是否仅用于从派生类调用基类方法?
答案 0 :(得分:4)
是的,super
仅用于调用方法。 super
实际上不是对象指针。如果是,它将具有与self
相同的指针值。他们指的是同一件事。只是super
改变了方法实现的查找。
当您向self
发送消息时,搜索您发送的消息的实现始于self
指向的对象的实际类。这可能与self
指针的静态类型不同。
当您向super
发送消息时,搜索从类的超类开始,在该类的实现中出现消息到super
语句。这是super
的唯一目的。