内省,用通俗的话来说就是搞清楚内部状况。
搞清楚什么东西的内部状况呢?类或者对象。
都有哪些内部状况呢?主要分为三方面:类成员关系;是否能接受某个消息;是否遵循某个协议。
内省是运行时行为,这套机制由Objective-C语言的运行时环境支持。
NSObject协议定义了一些进行内省的方法,所有从NSObject继承的类都遵循该协议,都可以使用这些方法。主要的方法有:
- class
返回(消息)接收者的类对象。
- superclass
返回接收者的父类的类对象。
- isEqual:
判断接收者和给定对象是否相等。两个对象相等的首要条件便是它门的hash值是相同的(一般是内存地址)。定义isEqual:方法要求必须同时定义hash方法。
- (NSUInteger)hash
返回在可以在一个hash表结构中作为表地址的整数。
- self
返回接收者。
- isKindOfClass:
判断接收者是否是给定类或者给定类的派生类的实例。
- isMemberOfClass:
判断接收者是否是给定类的实例。
- respondsToSelector:
判断接收者是否实现了可以响应指定消息的方法或者从它的父类那里继承类这样的方法。
- conformsToProtocol:
判断接收者是否遵循指定协议。
- (NSString *)description
返回一个描述接收者内容的字符串。
- (id)performSelector:(SEL)aSelector
向接收者发送一个消息,返回消息执行的结果。
- (id)performSelector:(SEL)aSelector withObject:(id)anObject
以一个对象为参数向接收者发送消息。
- (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anObject
以两个对象为参数向接收者发送消息。
- isProxy
判断接收者是否不是从NSObject继承过来的。如果不是从NSObject继承来的返回YES,否则返回NO。