Я хочу вызвать метод суперкласса суперкласса, не нарушая цепочку наследования. Что-то вроде этого:
+(id) alloc
{
return [super.super alloc];
}
Есть ли способ достичь этого?
Не путайте с предложением поведения методом superclass
, обсуждаемым здесь.
UPD:
Несколько слов о различиях super
и superclass
.
Допустим, что мы имеем AClass
и SuperAClass
. Как следует из их имен AClass
наследует SuperAClass
. Каждый из них имеет реализацию метода -(void) foo;
AClass
реализует один из следующие методы класса:
1. суперкласс:
+(id) alloc {
return [[self superclass] alloc];
}
2. супер:
+(id) alloc {
return [super alloc];
}
Теперь предположим, что эти 2 строки кода:
AClass *AClassInstance = [AClass alloc];
[AClassInstance foo];
В первом случае (с использованием суперкласса) будет вызываться метод SuperAClass
foo
.
Для второго случая (с использованием супер) будет вызываться метод AClass
foo
.