1.是什么
1> runtime是一套比较底层的纯C语言API,属于1个C语言库,包含了很多底层的C语言API
2>平时编写的OC代码,在程序运行过程中,其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者
下面这就是一个实例,(在前面的文章中讲到过了!通过编译成c语言,我们可以看到底层文件)
OC :
[[Person alloc] init]
上面的Person对象创建时候,
runtime :
objc_msgSend(objc_msgSend(“Person” , “alloc”), “init”)
通过runtime可以动态获取一个对象的所有属性和值也可以获取所有的方法并调用,例如自定义对象的归档需要实现NSCoding协议并实现协议里面的方法,在方法中需要对对象的每一个属性进行归档和反归档,使用runTime不管有多少个属性不需要一个一个的去归档 只需要通过以下代码即可实现:
- (void)encodeWithCoder:(NSCoder*)aCoder{
unsignedintcount =0;
Ivar*ivars =class_copyIvarList([Personclass], &count);
for(inti =0; i
//取出i位置对应的成员变量
Ivarivar = ivars[i];
//查看成员变量
constchar*name =ivar_getName(ivar);
//归档
NSString*key = [NSStringstringWithUTF8String:name];
//KVC取值
idvalue = [selfvalueForKey:key];
[aCoderencodeObject:valueforKey:key];
}
//释放
free(ivars);
}
如果有人问有没有在哪里使用过runtime就回答 在自定义对象的归档的时候使用过,使用了runTime中动态获取对象所有的属性,简化了代码。
网友评论