我正在尝试构建Objective-C静态框架,但遇到了层次结构/组织问题。
对于这个问题,假设我有3个类,classA,classB和classC。 classB和classC是classA的子类。 classB和classC都需要特殊的资源文件。
#import "classB.h"
#import "classC.h"
@implement classA
+ (classA)factoryMethodCreateType:(NSString *)type {
classA a;
if ([type isEqualToString:@"classB"]) {
a = [[classB alloc] init];
} else if ([type isEqualToString:@"classC"]) {
a = [classC alloc] init];
}
return a;
}
@end
我想静态打包框架,classB.framework和classC.framework,这样当用户想要使用classB时,他们不需要包含classC及其资源文件。此外,用户可以使用classA作为使用任一框架的入口点。
我假设我只创建classB.framework(包括classA和classB)和classC.framework(包括classA和classC),当用户想要使用这两种类型并包含两个框架时,用户将面对重复的符号?
处理这种情况的最佳方法是什么?以下方法是最好的方法吗?
将classA的实现更改为动态创建classB或classC,而不包括其头文件。
构建3个框架而不是2个:classA.framework,classB.framework,classC.framework。当用户想要使用classB时,用户应该包括classA.framework和classB.framework。
@implement classA
+ (classA)factoryMethodCreateType:(NSString *)type {
classA a;
id obj = [NSClassFromString(type) alloc];
a = objc_msgSend(obj, @selector(init));
return a;
}
@end