Runtime函数库中关于实例对象的函数使用

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);

猜你喜欢

转载自blog.csdn.net/weixin_33743248/article/details/87239010