Objective-C多重inheritance
我有2个类,一个包含methodA,另一个包含methodB。 所以在一个新的类中,我需要重写方法methodA和methodB。 那么如何在目标C中实现多inheritance? 我有点困惑的语法。
Objective-C不支持多重inheritance,你不需要它。 使用组成:
@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
现在你只需要调用相关伊娃的方法。 它是更多的代码,但是Objective-C中没有多重inheritance作为语言特性。
这是我如何将singletonPattern编码为“父母”基本上我使用了协议和类别的组合。
我唯一不能添加的是一个新的“伊娃”,但是我可以用相关的对象推它。
#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 { }
每当我想要一个类“inheritance”这个BGSuperSingleton我只是做:
#import "NSObject+singleton.h"
并添加@interface MyNewClass () <BGSuperSingleton>
你知道协议,协议是实现多重inheritance的方式