1个接口的两种不同实现(.h文件)

时间:2014-05-01 20:11:02

标签: objective-c

我有一个baseClass1.h和一个baseClass1.m

这些方法有几个基类使用的公共方法。我想要做的是创建相同方法声明的不同实现。

我写了baseClass2.m之后,其接口也是baseClass1.h。

现在在子类中,我如何使用我在baseClass2.m中定义的方法而不是从baseClass1.m中定义的方法

编辑:

我将baseClass1工作空间中的目标复制到新目标。两个实现文件都是2个目标所独有的。我尝试做的是使用不同的.m文件与xCode中的每个目标选择。

这有点像改变AP定义。为了探索现在丢弃baseClass1.m的可能性。任何方式,即使我删除baseClass1.m,程序仍应构建

4 个答案:

答案 0 :(得分:2)

如果您想在两个不同的目标中使用同一个类的两个不同实现,那么您可以简单地为同一个类使用两个单独的实现文件,并将它们中的每一个仅添加到一个目标,例如< / p>

  • “BaseClass.h”:界面,
  • “BaseClassA.m”:BaseClass的实施,仅限于目标A,
  • “BaseClassB.m”:仅在目标B中实现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)

从技术上讲,这是可能的:事实上很容易。

这也是一个坏主意。

为什么这是一个坏主意?因为这是出乎意料的。这是非常意外的。出乎意料的是,有些人认为不可能,更多的人甚至不理解你在哪里问。

通过使用这种反模式,您将面临未来的开发人员浪费时间,试图弄清楚您做了什么,以及为什么要这样做。

在这个例子中,只需使用一个协议,通过使用集群类伪造它,或者只使用一个标志在一个类中支持两个实现来在两者之间切换。不要因为你对构建系统很聪明而让每个人都变得更难。