反射机制

前言

因为Objective C是动态语言,我们可以根据这个特性做一些实例创建动态方法调用条件判断的操作。

常用方法反射的API

// 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);

运行时判断对象类型的方法

// 当前对象是否这个类或其子类的实例
- (BOOL)isKindOfClass:(Class)aClass;
// 当前对象是否是这个类的实例
- (BOOL)isMemberOfClass:(Class)aClass;
// 当前对象是否遵守这个协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
// 当前对象是否实现这个方法
- (BOOL)respondsToSelector:(SEL)aSelector;

使用

//根据字符串 运行时 创建实例对象
Class class = NSClassFromString(@"HomeViewController");
HomeViewController *vc = [[class alloc] init];
//根据字符串动态的进行方法调用
SEL selector = NSSelectorFromString(@"setupNavBar");
[vc performSelector:selector];

//运行时动态判断当前对象是否是UIView对象或其子类
if ([self isKindOfClass:NSClassFromString(@"UIView")]) {
NSLog(@"The Current Class is UIView Class");
}

if ([self isKindOfClass:[UIView class]]) {
NSLog(@"The Current Class is UIView Class");
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 了解反射机制 Objective-C语言中的OC对象,都继承自NSObject类。这个类为我们提供了一些基础的方法...
    iOS小飞羊阅读 1,012评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,762评论 0 9
  • 目录 1 反射机制的概念 2 反射机制原理 首先还是按照惯例和大家解释下什么反射机制? 反射的概念是由Smith在...
    辛小二阅读 9,423评论 4 13
  • 小时候被爸订了娃娃亲,打记事起就被周遭的人无微不至的"关心"。 耳边经常会响起,你媳妇儿刚才被毛毛虫吓尿了,你媳妇...
    素一航阅读 498评论 0 4
  • 一 我急匆匆的冲进教室,讲台上还没有老师的身影。我长出了一口气,慢悠悠的向座位走去。却发现同学们都戏谑的望着我,我...
    一条小鱼的成长空间阅读 410评论 2 5