MethodAを含む2つのクラスとmethodBを含む2つのクラスがあります。そのため、新しいクラスでは、methodAメソッドとmethodBメソッドをオーバーライドする必要があります。それでは、目的Cで多重継承を実現するにはどうすればよいですか?私は構文と少し混同しています。
Objective-Cは多重継承をサポートしていないため、必要ありません。構成を使用する:
@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
ここで、関連するivarでメソッドを呼び出すだけです。それはより多くのコードですが、objective-Cの言語機能としての多重継承はありません。
これは、singletonPatternを「親」としてコーディングする方法です。基本的に、プロトコルとカテゴリの組み合わせを使用しました。
追加できないのは新しい「ivar」だけですが、関連オブジェクトでプッシュできます。
_#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
{
}
_
クラスにこのBGSuperSingletonを「継承」させたいときはいつでも、次のようにします。
_#import "NSObject+singleton.h"
_
@interface MyNewClass () <BGSuperSingleton>
を追加します