当前位置:   article > 正文

【iOS篇】Runtime的应用_ios runtime应用

ios runtime应用

我们可以运用runtime机制做一些事情,动态的获取类的一些属性和方法,动态添加方法和方法交换。

1、获取类名

动态获取类名,使用class_getName(Class)就可以在运行时来获取类的名称。class_getName()函数返回的是一个char类型的指针,也就是C语言的字符串类型,所以我们要将其转换成NSString类型,然后在返回出去。

NSString *className = [GCRuntimeKit fetchClassName:[Test class]];
NSLog(@"获取类名:%@",className);
2、获取成员变量

获取类的成员变量,使用ivar_getTypeEncoding()来获取相应成员变量的类型。使用ivar_getName()来获取相应成员变量的名称。

NSArray *ivarList = [GCRuntimeKit fetchIvarList:[Test class]];
NSLog(@"获取类成员变量:%@",ivarList);
3、获取成员属性

获取有setter和getter方法的成员变量,主要使用class_copyPropertyList(Class,&count)来获取属性列表,然后通过for循环来获取每个属性的名字。注意,使用property_getName()获取到的名字依然是C语言的char类型。

NSArray *proList = [GCRuntimeKit fetchPropertyList:[Test class]];
NSLog(@"获取属性列表:%@",proList);
4、获取类的实例方法

通过class_copyMethodList()方法获取类的实例方法列表,然后通过for循环使用method_getName()来获取每个方法的名称,然后将方法的名称转换成NSString类型,存储在数组中,并返回。

NSArray *methodList = [GCRuntimeKit fetchMethodList:[Test class]];
NSLog(@"获取实例方法:%@",methodList);
5、获取协议列表

通过class_copyProtocolList()来获取列表,然后通过for循环使用protocol_getName()来获取协议的名称,最后将其转换成NSString类型放入数组中,并返回。

NSArray *protocolList = [GCRuntimeKit fetchProtocolList:[Test class]];
NSLog(@"获取协议列表:%@",protocolList);
6、动态添加属性
Test *test = [Test new];
test.dynamicAddPro = @"动态添加属性";
7、动态添加方法
[test performSelector:@selector(addMethod:) withObject:@"动态添加方法"];
8、交换方法
[test swwingMethod];
[test method1];

Demo下载

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号