如果我试图找出一个对象是某个类的类型(或该类的后代中的任何一个),似乎我应该使用“isKindOf:”
if ([foo isKindOfClass:[bar class]]) {...}
但是编译器给了我一个警告“无效接收器类型'void *'”。
如果我将“foo”转换为NSObject ...或任何其他类,这就消失了!无论我将对象投射到哪个类,代码仍然有效。也就是说,即使我这样做:
if ([(NSString *)foo isKindOfClass:[bar class]]) {...}
当且仅当“foo”类型为“bar”时,“isKindOfClass”方法仍返回TRUE。
我在这里遗漏了什么吗?不应该将“foo”转换为另一种类型使逻辑失败?为什么我需要施放“foo”,因为重点是我想弄清楚它是什么类型的对象?
答案 0 :(得分:1)
我猜你已经宣布foo为:
void* foo;
void *不是Objective-C类型,因此您无法向其发送isKindOfClass
等消息。
相反声明foo:
id foo;