Ich muss aus der Kategorie eine konkrete Implementierung der Methode aufrufen (auch wenn sie überschrieben wird). Ist es möglich? (Nur für den Fall: Ich weiß, alle Methoden in Objective-C sind virtuelle.)Nicht-virtuelle Methoden in Objective-C
// class A
@interface A
- (void)foo;
@end
@implementation A
- (void)foo
{
NSLog(@"initial foo");
}
@end
// subclass of A
@interface A1: A
@end
@implementation A1
- (void)foo
{
NSLog(@"overridden foo");
}
@end
// category to A
@interface A (Category)
- (void)bar;
@end
@impletemtation A (Category)
- (void)bar
{
[self foo]; // probably, I should specify here what exactly must be self
// but I don't know how
}
@end
/////////////////////////////////////////////////////////////////
A1 *a = [[A1 alloc] init];
[a bar]; // now the "overridden foo" string will be printed
// my goal is to print "initial foo" !!!
Wollen Sie wirklich Verkapselung so brechen? – Sulthan
Ich bin mir noch nicht sicher. Trotzdem bin ich neugierig zu wissen, ob das theoretisch möglich ist. –
Das wäre ein riesiger Code-Geruch, aber hast du '[super foo];'? – vikingosegundo