Ich habe drei Klassen, die dasselbe Protokoll implementieren und dieselbe Elternklasse haben, die das Protokoll nicht implementiert. Normalerweise hätte ich das Protokoll als reine virtuelle Funktionen in der Elternklasse, aber ich konnte keine Objective-C-Methode dafür finden.
Ich möchte Polymorphismus für diese Unterklassen verwenden, indem ich rein virtuelle Funktionen in der Oberklasse deklariere und dann die Kinder diese Funktionen implementieren lasse. Die einzige Objective-C-Methode, die ich gefunden habe, besteht darin, jedes Kind explizit zur Implementierung eines Protokolls zu veranlassen. Wenn ich dies auf diese Weise mache, weiß die Oberklasse nicht, dass die Kinder dieses Protokoll implementieren, sodass Kompilierungszeitwarnungen angezeigt werden überall.
Irgendein Pseudocode, wenn das keinen Sinn ergibt:
%Vor%Der Konsument dieser Klassen:
%Vor% Der einzige nette Weg, den ich gefunden habe, um rein virtuelle Funktionen in Objective-C zu machen, ist ein Hack, indem ich [self doesNotRecognizeSelector:_cmd];
in die Elternklasse lege, aber es ist nicht ideal, da es Laufzeitfehler verursachen wird anstatt Kompilierzeit.
Alternativ können Sie Folgendes verwenden:
%Vor%anstelle der folgenden, wenn Sie nur die Warnung unterdrücken möchten.
%Vor%performSelector: funktioniert nur, wenn die Anzahl der Argumente null oder eins ist. Flexiblere Aufrufe können mit NSInvocation erreicht werden.
Ich persönlich würde das Protokoll für die Superklasse implementieren, aber die Methoden wie folgt implementieren:
%Vor%Wenn Sie einmal vergessen, eine Methode in einer konkreten Unterklasse zu überschreiben, sollte das sofort offensichtlich sein.
Tags und Links objective-c polymorphism