Runtime 函数库提供了很多函数用于一些操作,本篇主要总结关于实例对象的操作函数:
1、类的实例化
/* 创建类的实例,为默认 malloc() 内存区域中的类分配内存。
* @param cls 要创建的实例的类。
* @param extraBytes 要分配的额外字节数;额外的字节用来存储类中定义的实例变量之外的其他实例变量。
* @return 指定类的一个实例
*/
id class_createInstance(Class cls, size_t extraBytes);
/* 在提供的特定位置创建类的实例。
* @param cls 要创建的实例的类。
* @param bytes 创建 cls 实例的位置。必须指向至少 class_getInstanceSize(cls) 字节的对齐良好的零填充内存。
*/
id _Nullable objc_constructInstance(Class _Nullable cls, void * _Nullable bytes);
/* 在不释放内存的情况下销毁类的实例,并删除该实例可能具有的任何关联引用。
*/
void * _Nullable objc_destructInstance(id _Nullable obj);
2、使用实例
/* 拷贝指定对象
* @param obj 一个 Objective-C 实例对象.
* @param size 对象obj的大小
*/
id _Nullable object_copy(id _Nullable obj, size_t size);
/* 释放指定对象占用的内存。
* @return 返回 nil
*/
id _Nullable object_dispose(id _Nullable obj);
/* 获取对象的类。如果 obj 为Nil,则返回 nil
*/
Class _Nullable object_getClass(id _Nullable obj);
/* 设置对象的类。
* @return 返回该对象之前所属的类;如果 obj 为Nil,则返回 nil
*/
Class _Nullable object_setClass(id _Nullable obj, Class _Nonnull cls);
/* 判断一个对象是否是类对象。
* @return 如果对象是类或元类,则为true,否则为false。
*/
BOOL object_isClass(id _Nullable obj);
/* 获取对象中实例变量的值。
* @return 如果 obj 为nil,则为nil。
* @note 如果实例变量的 Ivar 已知,则 object_getIvar() 函数比 object_getinstancevable() 函数快。
*/
id _Nullable object_getIvar(id _Nullable obj, Ivar _Nonnull ivar);
/* 设置对象中实例变量的值。
* @note 具有已知内存管理的实例变量(如ARC的strong 与 weak)使用该内存管理。
* 具有未知内存管理的实例变量被分配为unsafe_unretain。
* @note 如果实例变量的Ivar已知,则 object_setIvar() 函数比 object_setinstancevable() 函数快。
*/
void object_setIvar(id _Nullable obj, Ivar _Nonnull ivar, id _Nullable value);
/* 设置对象中实例变量的值。
* @note 具有已知内存管理的实例变量(如ARC的strong 与 weak)使用该内存管理。
* 具有未知内存管理的实例变量时,将它们视为 strong 。
* @note 如果实例变量的Ivar已知,则 object_setIvar() 函数比 object_setinstancevable() 函数快。
*/
void object_setIvarWithStrongDefault(id _Nullable obj, Ivar _Nonnull ivar, id _Nullable value);
/* 设置实例对象的指定变量的值。
* @param name 一个C字符串,是实例变量的名称。
* @param value 实例变量的新值。
* @return 一个指向Ivar数据结构的指针,该结构定义了由name指定的实例变量的类型和名称。
* @note 具有已知内存管理的实例变量(如ARC strong和 weak)使用该内存管理。
* 具有未知内存管理的实例变量被分配为 unsafe_unretain。
*/
Ivar _Nullable object_setInstanceVariable(id _Nullable obj, const char * _Nonnull name,void * _Nullable value);
/* 设置实例对象的指定变量的值。
* @param name 一个C字符串,是实例变量的名称。
* @param value 实例变量的新值。
* @return 一个指向Ivar数据结构的指针,该结构定义了由name指定的实例变量的类型和名称。
* @note 具有已知内存管理的实例变量(如ARC strong和 weak)使用该内存管理。
* 分配具有未知内存管理的实例变量时,将它们视为 strong 变量。
*/
Ivar _Nullable object_setInstanceVariableWithStrongDefault(id _Nullable obj, const char * _Nonnull name,void * _Nullable value);
/* 获取实例对象的指定变量的值。
* @param name 一个C字符串,是实例变量的名称。
* @param outValue 返回时,包含指向实例变量值的指针。
* @return 一个指向Ivar数据结构的指针,该结构定义了由name指定的实例变量的类型和名称。
*/
Ivar _Nullable object_getInstanceVariable(id _Nullable obj, const char * _Nonnull name, void * _Nullable * _Nullable outValue);
网友评论