Предупреждение: передача аргумента от другого типа Objective-C

В настоящее время я пытаюсь скомпилировать OCMock с GCC4.2 (оригинал: 4.0) и получаю следующее предупреждение:

предупреждение: передача аргумента 1 'partialMockForObject:' из другого типа Objective-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;

префикс аргумента с приведением к id устраняет проблему. Я думал, что все объекты являются подклассом NSObject, и хотя приведение будет неявным (замена суперкласса: суперкласс всегда можно заменить любым его дочерним классом)


person Johannes Rudolph    schedule 04.10.2009    source источник


Ответы (1)


Все объекты не обязательно являются потомками NSObject. Большинство классов Какао (NSProxy - единственное исключение, которое возникает у меня из головы), но если вы не объявляете класс как производный от NSObject, этого не будет. Может быть, вы забыли об этом в декларации, где бы это ни происходило?

person Chuck    schedule 04.10.2009
comment
это действительно производный класс NSProxy. Будет ли работать приведение к (id)? Большое спасибо, отмечу как правильный ответ. - person Johannes Rudolph; 04.10.2009
comment
@Johannes: Почти наверняка. Я знаю, что в других версиях этой структуры сигнатура метода имела тип аргумента id, и NSProxy будет реагировать на все, что делает объект на другом конце. - person Chuck; 04.10.2009