NSArray *classes = @[[NSArray class], [NSDictionary class], [NSSet class]]; id inputObject = [NSSet new]; for (Class class in classes) { if ([inputObject isKindOfClass: class]) { return true; } } return false;
你一般都想要 isKindOfClass ,它还检查类型是否是给定类型的子类。如果你想知道它是完全相同的类,你可以使用 isMemberOfClass ,但你经常会感到惊讶。例如:
isKindOfClass
isMemberOfClass
[[NSSet new] isMemberOfClass:[NSSet class]] == false
!!!!
为什么NSSet不是NSSet?因为NSSet是一个类集群,在这种情况下,“真实”类型是一个名为__NSSetI的内部实现子类。这种事情在Objective-C中发生了很多,所以你通常是指 isKindOfClass 除非你有特殊需要。