将OCMock类转换为ARC时的前向声明错误

时间:2012-04-02 20:25:37

标签: objective-c ocmock

我刚刚升级到Xcode版本4.3.2(4E2002)。我正在将一个模拟类从手动内存管理转换为ARC。

代码如下所示:

@implementation OCProtocolMockObject

- (id)initWithProtocol:(Protocol *)aProtocol
{
    [super init];
    mockedProtocol = aProtocol;
    return self;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"OCMockObject[%s]", [mockedProtocol name]];
}

@interface看起来像这样:

@interface OCProtocolMockObject : OCMockObject 
{
    Protocol    *mockedProtocol;
}

编译器抱怨说:

 "Receiver type 'Protocol' for instance message is a forward declaration".

“mockedProtocol”在描述方法中突出显示。

我以前遇到过这个问题。在ARC模式下,通常是因为编译器对前向引用更严格,您只需要包含相应的头文件。

但是,我能找到的唯一“Protocol.h”是

#import <objc/Protocol.h>

导入此操作无效。此外,将导入添加到OCProtocolMockObject.h不会做任何事情。还有其他一些Protocol.h我不知道吗?

1 个答案:

答案 0 :(得分:1)

通过编译没有ARC的OCMock解决了这个问题。 (在每个OCMock源文件上使用-fno-objc-arc标志)