对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。
1、 判断类型
-(BOOL) isKindOfClass: classObj 判断对象是否是这个类或者这个类的子类的实例。
-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例,不管是否是这个类的子类的实例。
2、判断是否实现方法
-(BOOL) respondsToSelector: selector 判读实例是否有这样方法
+(BOOL) instancesRespondToSelector: 判断类是否有这个方法。此方法是类方法,不能用在类的对象
C++ 使用的是强类型:对象必须符合其类型,否则不能通过编译。
在 Objective-C 中,id类型类似于(void*) ,可以指向任何类的实例。而不需要强制转换。
3、判断是否实现了某个接口
+ (BOOL)conformsToProtocol:(Protocol *)protocol;
类名 conformsToProtocol:NSProtocolFromString(@"协议名称")
if([NSObject conformsToProtocol:NSProtocolFromString(@"NSCoding")])
{
}