【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下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值