Зачем мне нужно приводить объект к типу при отправке ему сообщения isKindOf:? - PullRequest
1 голос
/ 16 ноября 2009

Если я пытаюсь выяснить, является ли объект типом определенного класса (или любого из потомков этого класса), мне кажется, что я должен использовать «isKindOf:»

if ([foo isKindOfClass:[bar class]]) {...}

Но компилятор выдает мне предупреждение "недопустимый тип получателя" void * "".

Это исчезнет, ​​если я приведу "foo" к NSObject ... или любому другому классу! Независимо от того, к какому классу я приведу объект, код все равно работает. То есть, даже если я делаю:

if ([(NSString *)foo isKindOfClass:[bar class]]) {...}

метод isKindOfClass по-прежнему возвращает TRUE, если и только если «foo» имеет тип «bar».

Я что-то здесь упускаю? Не должно ли приведение «foo» к другому типу сделать логику неудачной? И зачем мне вообще разыгрывать "foo", поскольку все дело в том, что я пытаюсь выяснить, какой это тип объекта?

1 Ответ

1 голос
/ 16 ноября 2009

Полагаю, вы объявили foo как:

void* foo;

void * не является типом Objective-C, поэтому вы не можете отправлять ему сообщения типа isKindOfClass.

Вместо этого объявите foo следующим образом:

id foo;
...