警告:从不同的Objective-C类型传递参数

警告:从不同的Objective-C类型传递参数,objective-c,gcc,compiler-errors,compiler-warnings,Objective C,Gcc,Compiler Errors,Compiler Warnings,我目前正在尝试使用GCC4.2(原始版本:4.0)编译OCMock,并开始收到以下警告: 警告:正在传递的参数1 “partialMockForObject:”来自不同的 目的-C型 调用方法是: - (void)forwardInvocationForRealObject:(NSInvocation *)anInvocation { // in here "self" is a reference to the real object, not the mock OCParti

我目前正在尝试使用GCC4.2(原始版本:4.0)编译OCMock,并开始收到以下警告:

警告:正在传递的参数1 “partialMockForObject:”来自不同的 目的-C型

调用方法是:

- (void)forwardInvocationForRealObject:(NSInvocation *)anInvocation
{
    // in here "self" is a reference to the real object, not the mock
    OCPartialMockObject *mock = [OCPartialMockObject partialMockForObject:(id)self];
    // ...
}
+ (id)partialMockForObject:(NSObject *)anObject;
被调用的方法是:

- (void)forwardInvocationForRealObject:(NSInvocation *)anInvocation
{
    // in here "self" is a reference to the real object, not the mock
    OCPartialMockObject *mock = [OCPartialMockObject partialMockForObject:(id)self];
    // ...
}
+ (id)partialMockForObject:(NSObject *)anObject;

在参数前面加上转换为id的前缀可以解决这个问题。我认为所有对象都是NSObject的子类,尽管强制转换是隐式的(超类替换:超类总是可以被它的任何子类替换)

所有对象不一定都是NSObject的后代。大多数Cocoa类都是这样的(Nproxy是我脑子里唯一的例外),但是如果你不声明一个类是从NSObject派生的,它就不会是这样。您是否忘记了在声明中,无论在何处发生这种情况?

它实际上是一个Nproxy派生类。演员阵容是否有效?非常感谢,我会把它标记为正确答案。@Johannes:几乎可以肯定。我知道在该框架的其他版本中,方法签名的参数类型为id,而NSProxy将响应另一端的对象所做的任何事情。