iOS Runtime
2016-06-16 15:12:20 0 举报
AI智能生成
iOS Runtime是一套C语言函数库,它提供了一系列的API,用于访问Objective-C和Swift对象的属性和方法。这些API允许开发者在运行时动态地创建、修改和管理对象。例如,你可以使用`class_getInstanceMethod`函数获取一个类的方法,然后使用`method_invoke`函数调用这个方法。此外,你还可以使用`objc_allocateClassPair`函数创建一个新的类,并使用`class_addMethod`函数为这个类添加方法。总之,iOS Runtime为开发者提供了强大的工具,使他们能够在运行时灵活地操作Objective-C和Swift对象。
作者其他创作
大纲/内容
类与对象
Class
isa:需要注意的是在Objective-C中,所有的类自身也是一个对象,这个对象的Class里面也有一个isa指针,
它指向metaClass(元类),我们会在后面介绍它。
Class super_class OBJC2_UNAVAILABLE; // 父类
const char *name OBJC2_UNAVAILABLE; // 类名
long version OBJC2_UNAVAILABLE; // 类的版本信息,默认为0
long info OBJC2_UNAVAILABLE; // 类信息,供运行期使用的一些位标识
long instance_size OBJC2_UNAVAILABLE; // 该类的实例变量大小
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; // 该类的成员变量链表
struct objc_method_list **methodLists OBJC2_UNAVAILABLE; // 方法定义的链表
struct objc_cache *cache OBJC2_UNAVAILABLE; // 方法缓存
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE; // 协议链表
类与对象操作函数
类相关操作函数
类名(name):const char * class_getName ( Class cls );
父类(super_class)和元类(meta-class):
Class class_getSuperclass ( Class cls );
BOOL class_isMetaClass ( Class cls );
实例变量大小:size_t class_getInstanceSize ( Class cls );
成员变量(ivars)及属性:
// 获取类中指定名称实例成员变量的信息
Ivar class_getInstanceVariable ( Class cls, const char *name );
// 获取类成员变量的信息
Ivar class_getClassVariable ( Class cls, const char *name );
// 添加成员变量
BOOL class_addIvar ( Class cls, const char *name, size_t size, uint8_t alignment, const char *types );
// 获取整个成员变量列表
Ivar * class_copyIvarList ( Class cls, unsigned int *outCount );
属性操作函数
// 获取指定的属性
objc_property_t class_getProperty ( Class cls, const char *name );
// 获取属性列表
objc_property_t * class_copyPropertyList ( Class cls, unsigned int *outCount );
// 为类添加属性
BOOL class_addProperty ( Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount );
// 替换类的属性
void class_replaceProperty ( Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount );
Rumtime库概况
封装:在这个库中,对象可以用C语言中的结构体表示,而方法可以用C函数来实现,
另外再加上了一些额外的特性。这些结构体和函数被runtime函数封装后,
我们就可以在程序运行时创建,检查,修改类、对象和它们的方法了。
找出方法的最终执行代码:当程序执行[object doSomething]时,
会向消息接收者(object)发送一条消息(doSomething),
runtime会根据消息接收者是否能响应该消息而做出不同的反应。
0 条评论
下一页