为什么在向对象发送“isKindOf:”消息时需要输入对象?

时间:2009-11-16 05:55:43

标签: objective-c types warnings casting

如果我试图找出一个对象是某个类的类型(或该类的后代中的任何一个),似乎我应该使用“isKindOf:”

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

但是编译器给了我一个警告“无效接收器类型'void *'”。

如果我将“foo”转换为NSObject ...或任何其他类,这就消失了!无论我将对象投射到哪个类,代码仍然有效。也就是说,即使我这样做:

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

当且仅当“foo”类型为“bar”时,“isKindOfClass”方法仍返回TRUE。

我在这里遗漏了什么吗?不应该将“foo”转换为另一种类型使逻辑失败?为什么我需要施放“foo”,因为重点是我想弄清楚它是什么类型的对象?

1 个答案:

答案 0 :(得分:1)

我猜你已经宣布foo为:

void* foo;

void *不是Objective-C类型,因此您无法向其发送isKindOfClass等消息。

相反声明foo:

id foo;