我有一个baseClass1.h
和一个baseClass1.m
这些方法有几个基类使用的公共方法。我想要做的是创建相同方法声明的不同实现。
我写了baseClass2.m
之后,其接口也是baseClass1.h。
现在在子类中,我如何使用我在baseClass2.m中定义的方法而不是从baseClass1.m中定义的方法
编辑:
我将baseClass1工作空间中的目标复制到新目标。两个实现文件都是2个目标所独有的。我尝试做的是使用不同的.m文件与xCode中的每个目标选择。
这有点像改变AP定义。为了探索现在丢弃baseClass1.m的可能性。任何方式,即使我删除baseClass1.m
,程序仍应构建
答案 0 :(得分:2)
如果您想在两个不同的目标中使用同一个类的两个不同实现,那么您可以简单地为同一个类使用两个单独的实现文件,并将它们中的每一个仅添加到一个目标,例如< / p>
实现文件不需要与类同名,这只是一个(有用的)约定。
BaseClass
的实施,仅限于目标A,BaseClass
。
答案 1 :(得分:1)
您可以使用协议声明公共接口。
baseProtocol.h:
@protocol your_protocol <NSObject>
@optional
- (void)methodA;
@required
- (void)methodB;
@end
baseClass1.h:
#import "baseProtocol.h"
@interface baseClass1 : NSObject<your_protocol>
@end
baseClass2.h:
#import "baseProtocol.h"
@interface baseClass2 : NSObject<your_protocol>
@end
答案 2 :(得分:1)
您需要为通用界面创建@protocol
。
在baseClass1和baseClass2中实现它的方法。
然后你可以继承你想要的任何基类。
答案 3 :(得分:0)
从技术上讲,这是可能的:事实上很容易。
这也是一个坏主意。
为什么这是一个坏主意?因为这是出乎意料的。这是非常意外的。出乎意料的是,有些人认为不可能,更多的人甚至不理解你在哪里问。
通过使用这种反模式,您将面临未来的开发人员浪费时间,试图弄清楚您做了什么,以及为什么要这样做。
在这个例子中,只需使用一个协议,通过使用集群类伪造它,或者只使用一个标志在一个类中支持两个实现来在两者之间切换。不要因为你对构建系统很聪明而让每个人都变得更难。