是时候写写技术blog了,记录自己开发过程中所学和所得
runtime
是OC作为动态语言很关键的一个类库
里面有很多程序运行时调用的方法
OC黑科技之所在
能动态的对类,变量,方法,协议进行管理和添加
接下来是一个简单的获取类所有变量的例子:
//存放类变量数量
unsigned int propertyCount
//获取测试类的变量数组
objc_property_t *properties = class_copyPropertyList(TestClass, &propertyCount);
//遍历变量数组
for (int i =0; i < propertyCount; i++) {
//获取变量对象
objc_property_t property = properties[i];
//获取变量名
const char *propertyName = property_getName(property);
NSString *name = @(propertyName);
unsigned int attributesCount;
//获取变量属性数组
objc_property_attribute_t *attributes = property_copyAttributeList(property, &attributesCount);
//遍历属性数组
for (int x =0; x <attributesCount; x++) {
//属性对象
objc_property_attribute_t attribute =attributes[x];
//获取属性值
const char *attrValue = property_copyAttributeValue(property, attribute.name);
//属性名
NSString *attNameStr = @(attribute.name);
//属性值字符串
NSString *attValueStr = @(attrValue);
//打印一下
NSLog(@"attribute --Name:%@ --Value %@",attNameStr,attValueStr);
}
}
以上是runtime一个简单的使用,对类变量的基础操作,最近将数据导入模型对象的时候用到了这些,只是OC不支持泛型约束,目前只是编译器有泛型识别,所以将JSON数据导入模型时只能依赖协议来判断集合中的对象类型,处理导入集合的数据时会麻烦一点,需要声明协议,目前没发现更好的处理方法.