定义:
isKindOfClass:确定一个对象是否是一个类的成员,或者是派生自该类的成员。
isMemberOfClass:确定一个对象是否是当前类的成员。
小知识:
isMemberOfClass不能检测任何的类都是基于NSObject类这一事实,而isKindOfClass可以。
后记:
类簇实际上是Foundation框架下的一种设计模式,它管理了一组隐藏在公共接口下的私有类。在Cocoa中,许多类实际上是以类簇的方式实现的,即它们是一组隐藏在通用接口之下的与实现相关的类。例如创建NSString对象时,实际上获得的可能是NSLiteralString、NSCFString、NSSimpleCString、NSBallOfString或者其他未写入文档的与实现相关的对象。所以,请不要尝试去创建NSString、NSArray或NSDictionary的子类。如果必须添加或修改某个方法,可以使用类目的方式。
对于类簇使用isMemberOfClass是不允许的,因为类簇是由抽象公共类管理的一组私有类,抽象公共类并不是真正的实例的父类,类簇中真正的类从属关系被隐藏了,所以使用isMemberOfClass(UIButton返回YES)结果可能不准确。
如NSString、NSArray、NSDictionary、NSData、NSSet、NSMutableString、NSMutableArray、NSMutableDictionary、NSMutableData、NSMutableSet、NSNumber等都是以类簇方式实现的。