iOS Object-C 中Runtime详解及实例代码
1. Runtime简介
Runtime是OC的运行时系统。是一个由 C 语言编写的 底层的 Objective-C 对象(如实例和 Class)的管理系统。它是编译器和 CPU 的桥梁, Objective-C 的“动态”本质得以实现。
通过运行时机制,Objective-C能够实现动态绑定和方法调用、动态的添加或替换方法实现、实现类和对象的创建和销毁、属性的实现等。在 Objective-C 中,当我们调用一个方法时,是通过消息传递机制来实现的。我们在代码中调用方法,并不是直接调用方法的实现,而是向对象发送一条消息,由对象根据消息找到对应的方法实现并执行。
Objective-C runtime 是开源的,我们可以通过下载源代码学习其中的细节并进行修改。
2. Runtime常用方法
2.1 获取类名
// 获取类名
const char * class_getName(Class cls)
2.2 获取类的父类
// 获取类的父类
Class class_getSuperclass(Class cls);
2.3 获取类的实例变量
// 获取类的实例变量
Ivar class_getInstanceVariable(Class cls, const char *name)
2.4 获取类的属性
// 获取类的属性
objc_property_t class_getProperty(Class cls, const char *name)
2.5 获取类的方法
// 获取类的方法
Method class_getInstanceMethod(Class cls, SEL name)
2.6 获取类实例变量的值
// 获取类实例变量的值
id object_getIvar(id obj, Ivar ivar)
2.7 设置类实例变量的值
// 设置类实例变量的值
void object_setIvar(id obj, Ivar ivar, id value)
2.8 动态创建类
// 动态创建类
Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes)
2.9 动态添加方法
// 动态添加方法
BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)
2.10 动态添加属性
// 动态添加属性
BOOL class_addProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount)
3. 实例说明
3.1 获取类名
- (NSString *)getClassname:(id)object{
const char *classname = class_getName([object class]);
return [NSString stringWithUTF8String:classname];
}
3.2 动态添加属性
- (void)addPropertyForClass:(Class)cls {
// 添加新属性
objc_property_attribute_t type = {"T","@\"NSString\""}; // 类型是NSString
objc_property_attribute_t ownership = { "C", "" }; // C = copy
objc_property_attribute_t backingivar = { "V", "_dynamicProperty" }; //属性名,记得带下划线
objc_property_attribute_t attrs[] = { type, ownership, backingivar };
class_addProperty(cls, "dynamicProperty", attrs, 3);
}
以上是本文档的简要介绍,关于Runtime的详细使用和示例代码可阅读下列文章:
Objective-C Runtime Programming Guide
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IOS Object-C 中Runtime详解及实例代码 - Python技术站