Runtime函数库中关于变量Ivar的函数使用

Runtime 函数库提供了很多函数用于一些操作,本篇主要总结关于变量 Ivar 的操作函数:

/* 获取指定类的 指定实例变量 Ivar。
 * @param cls 指定实例对象所属的类
 * @param name 要获取的实例变量的定义名称
 * @return 一个指向 Ivar 数据结构的指针,该结构包含关于由名称指定的实例变量的信息。
 */ 
Ivar class_getInstanceVariable(Class cls, const char *name);

/* 获取指定类的 指定类变量 Ivar。
 * @param cls 指定类
 * @param name 要获取的类变量的定义名称
 */ 
Ivar class_getClassVariable(Class cls, const char *name);

/* 获取类的所有实例变量
 * @param cls 要检查的类。
 * @param outCount 返回数组的长度;如果为 NULL,则不返回长度。
 * @return 类型为Ivar的指针数组,描述类声明的实例变量。
 *         不包括由父类声明的任何实例变量。
 *          必须使用 free() 函数释放数组。
 * 
 *  如果类声明没有实例变量,或者 cls 为Nil,则返回 NULL 并 *outCount 值为 0。
 */ 
Ivar *class_copyIvarList(Class cls, unsigned int *outCount);

/* 获取实例变量的名称
 */
const char * _Nullable ivar_getName(Ivar _Nonnull v);

/* 获取实例变量的数据类型
 */
const char * _Nullable ivar_getTypeEncoding(Ivar _Nonnull v);

/* 获取实例变量的偏移量。
 * @note 对于id类型或其他对象类型的实例变量,调用 object_getIvar() 和 object_setIvar() ,而不是使用此偏移量直接访问实例变量数据。
 */
ptrdiff_t ivar_getOffset(Ivar _Nonnull v);


/* 获取一个指针,指向与实例给定对象一起分配的任何额外字节。
 * @param obj 一个 Objective-C 对象
 * @return 一个指针,指向用obj分配的任何额外字节。如果没有为obj分配任何额外字节,那么对返回指针的解引用就是未定义的。
 * @note 这个函数返回一个指针,指向与实例一起分配的任何额外字节(由class_createInstance指定,extraBytes>0)。
 *       该内存遵循对象的普通ivar,但可能与上一个ivar不相邻。
 * @note 返回的指针保证是指针大小对齐的,即使对象最后一个ivar后面的区域的对齐程度低于该值。
 *       永远不能保证对齐大于指针大小,即使对象最后一个ivar后面的区域比指针大小更对齐。
 * @note 在 garbage-collected 环境中,对内存进行保守扫描。
 */
void * _Nullable object_getIndexedIvars(id _Nullable obj);

你可能感兴趣的:(Runtime函数库中关于变量Ivar的函数使用)