超级只能使用方法吗?

时间:2015-03-29 20:11:44

标签: objective-c

成为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关键字是否仅用于从派生类调用基类方法?

1 个答案:

答案 0 :(得分:4)

是的,super仅用于调用方法。 super实际上不是对象指针。如果是,它将具有与self相同的指针值。他们指的是同一件事。只是super改变了方法实现的查找。

当您向self发送消息时,搜索您发送的消息的实现始于self指向的对象的实际类。这可能与self指针的静态类型不同。

当您向super发送消息时,搜索从类的超类开始,在该类的实现中出现消息到super语句。这是super的唯一目的。