将OCMock类转换为ARC时的前向声明错误
问题描述:
我刚升级到Xcode版本4.3.2(4E2002)。我正在将手动内存管理的模拟类转换为ARC。将OCMock类转换为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我不知道?
答
通过编译没有ARC的OCMock来解决。 (在每个OCMock源文件上使用-fno-objc-arc标志)
“OCProtocolMockObject”的'@ interface'看起来像什么? – 2012-04-02 20:46:24
没什么特别的。已更新以包含它。 (OCMockObject也使用协议,但包括它也没有) – nont 2012-04-02 20:55:32
看来,协议只是最近宣布的这些天。这导致了不同的问题,请参阅https://github.com/erikdoe/ocmock/pull/7上的评论我必须在我的Lion机器上升级到新版本才能再次检查。 – 2012-04-05 10:34:54