Antworten:
Objective-C unterstützt keine Mehrfachvererbung und Sie benötigen sie nicht. Zusammensetzung verwenden:
@interface ClassA : NSObject {
}
-(void)methodA;
@end
@interface ClassB : NSObject {
}
-(void)methodB;
@end
@interface MyClass : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)anA b:(ClassB *)aB;
-(void)methodA;
-(void)methodB;
@end
Jetzt müssen Sie nur noch die Methode auf dem entsprechenden ivar aufrufen. Es ist mehr Code, aber in Objective-C gibt es keine Mehrfachvererbung als Sprachfunktion.
ClassA
und ClassB
? Ist Aufruf methodA:
auf MyClass
irgendwie automatisch rufen methodA:
auf ClassA
?
So codiere ich singletonPattern als "übergeordnetes Element". Grundsätzlich habe ich eine Kombination aus Protokoll und Kategorie verwendet.
Das einzige, was ich nicht hinzufügen kann, ist ein neues "ivar", aber ich kann es mit dem zugehörigen Objekt pushen.
#import <Foundation/Foundation.h>
@protocol BGSuperSingleton
+(id) singleton1;
+(instancetype)singleton;
@end
@interface NSObject (singleton) <BGSuperSingleton>
@end
static NSMutableDictionary * allTheSingletons;
+(instancetype)singleton
{
return [self singleton1];
}
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
//PO(result);
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
[result additionalInitialization];
}
return result;
}
-(void) additionalInitialization
{
}
Wann immer ich möchte, dass eine Klasse diesen BGSuperSingleton "erbt", mache ich einfach:
#import "NSObject+singleton.h"
und hinzufügen @interface MyNewClass () <BGSuperSingleton>
Kennen Sie Protokolle, Protokolle ist der Weg, um die Mehrfachvererbung zu implementieren
JAVA
, Interfaces
nicht oder Mimik Mehrfachvererbung zu liefern.