iOS反射机制

2018-12-15  本文已影响0人  7_c5dc

概念

所谓反射是程序能够访问、检测和修改自身状态或行为的一种能力。
对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);
上一篇 下一篇

猜你喜欢

热点阅读