首先,贴出一小部分获取Ivar相关信息的代码,如下
使用OC RunTime获取类的成员变量 以上代码都是比较简单的,而且网上也有很多类似的代码,就不一一叙述。
注意坑来了!!!!!!!!!!!!!!!!!!!
在此次学习中唯一比较坑的是 object_getIvar 不支持非对象,具体错误
ERROR:
Theard1 :EXC_BAD_ACCESS(code 1, address);
解决办法:
unsigned char *stuffBytes = (unsigned char *)(__bridge void *)object;
double floatValue = *((double *)(stuffBytes + offset));
//stuffBytes 指向你要获取成员变量的对象, offset 该成员变量的地址偏移量
return @(floatValue);
这里使用了指针直接访问地址的方式通过偏移量来找到变量的存储地址,再通过类型强转,得到我们所需要的值。
参考文章:https://www.bignerdranch.com/blog/inside-the-bracket-part-5-runtime-api/