(Wenn Sie eine Stimme abgeben, geben Sie Roman eine Stimme - seine Antwort war zuerst, ist richtig, nur ein Beispiel fehlte).
Sie sprechen über eine Class Cluster. Schauen Sie sich zum Beispiel die NSString Klasse an.
Es gibt NSString:
@interface NSString : NSObject
Und NSMutableString:
@interface NSMutableString : NSString
Beide, die erklären, eine extrem kleine Menge von Methoden in der Erklärung des Kerns Klasse. Wenn Sie NSString von einer Unterklasse ableiten würden, um Ihre eigene String-Klasse zu implementieren, müssten Sie nur diese Kernmethoden implementieren. Alle anderen in NSString implementierten Methoden sind in Bezug auf diese Kernmethoden implementiert. Und ebenso werden die Mutationsmethoden unter Verwendung der primitiven Methoden implementiert, die im Kern von NSMutableString deklariert sind.
Jetzt, offensichtlich, die Implementierung aller Veränderlichkeit über - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString
(die eine Kernmethode) würde grob ineffizient sein. Zur Laufzeit merkt man also, dass niemals eine Instanz von NSString oder NSMutableString ist, sondern nur Instanzen von Unterklassen (die eigentlich keine Unterklassen sind), aber sie könnten genauso gut im Kontext sein dieser Diskussion).
Und diese Unterklassen - die zur Laufzeit verwendete Implementierungsklasse - überschreiben fast alle Methoden von NSString und NSMutableString, um hoch optimierte Implementierungen der spezifischen Operationen bereitzustellen.
Also, würden Sie so etwas wie:
@interface MyAbstractClass : NSObject
... declare factory methods here ...
... declare core methods here ...
@end
@interface MyAbstractClass(AdditionalFunctionality)
... declare convenience here ...
@end
Dann bei der Umsetzung, Implementierung alle Kern Methoden wie @throw @"Must use subclass"
und alle AdditionalFunctionality
Methoden in Bezug auf die Kernmethoden.
Dies könnte ganz privat sein - nicht in einem Header überhaupt, auch:
@interface MyStackClass: MyAbstractClass @end
@implementation MyStackClass ... die Kern Methoden implementieren und überschreiben die Zusätzliche Funktionalitätsmethoden, die Optimierung benötigen ... @end
Wiederholen Sie für Ihre zusätzlichen Arten von Klassen. Implementieren Sie dann Factory-Methoden für MyAbstractClass, die bei Bedarf Instanzen der Unterklassen zurückgeben.
Wie wäre es mit "Protokolle"? Es ist näher an Java/C# Schnittstellen. Was ist das, was ich will? – user48545