概念
所谓反射是程序能够访问、检测和修改自身状态或行为的一种能力。
对oc来说,动态的运行状态下我们可以构造任意一个类,
然后我们通过这个类知道这个类的所有属性和方法,并且如果我们创建一个对象,
我们也可以通过对象找到这个类的任意一个方法,这就是反射机制
OC的反射机制是基于Runtime的,如果要实现复杂的反射机制需要runtime想着的东西
获取Class对象
// 在实例方法中通过self调用class实例方法获取类对象
[self class]
// 通过ViewController类直接调用class类方法获取类对象
[ViewController class]
// 在类方法中使用类对象调用class方法获取类对象
+ (Class)classMethod {
return [self class];
}
常用判断方法
- (BOOL)isKindOfClass:(Class)aClass;// 当前对象是否这个类或其子类的实例
- (BOOL)isMemberOfClass:(Class)aClass;// 当前对象是否是这个类的实例
- (BOOL)conformsToProtocol:(Protocol *)aProtocol; // 当前对象是否遵守这个协议
- (BOOL)respondsToSelector:(SEL)aSelector;// 当前对象是否实现这个方法
反射方法
// SEL和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromSelector(SEL aSelector);
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
// Class和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromClass(Class aClass);
FOUNDATION_EXPORT Class __nullable NSClassFromString(NSString *aClassName);
// Protocol和字符串转换
FOUNDATION_EXPORT NSString *NSStringFromProtocol(Protocol *proto) NS_AVAILABLE(10_5, 2_0);
FOUNDATION_EXPORT Protocol * __nullable NSProtocolFromString(NSString *namestr) NS_AVAILABLE(10_5, 2_0);
网友评论