博客> Objective-C Runtime 总结(二)
Objective-C Runtime 总结(二)
2019-09-17 14:40 评论:0 阅读:508 kyloMooa
ios runtime

第二篇 增加Classes

1. objc_allocateClassPair

作用

新建类

声明

Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes);

参数

superclass

基类 或者 Nil(当传入Nil时表示创建基类)

name

类名称

extraBytes

在类的末尾和元类对象中为索引ivars分配的字节数。(通常为0)

返回值

新类 或者 Nil (当类创建失败时)

建议

objc_allocateClassPair后使用 class_addMethod 和 class_addIvar给类添加属性,最后用objc_registerClassPair进行注册类。实例方法和实例变量应该添加到类本身中。类方法应添加到元类中。

2. objc_disposeClassPair

作用

新建类

声明

void objc_disposeClassPair(Class cls);

参数

cls

类(必须是objc_allocateClassPair创建的)

建议

如果cls类或任何子类的实例存在,则不能调用此函数。

3. objc_registerClassPair

作用

新建类

声明

void objc_registerClassPair(Class cls);

参数

cls

类cls

建议

objc_allocateClassPair后使用 class_addMethod 和 class_addIvar给类添加属性,最后用objc_registerClassPair进行注册类。实例方法和实例变量应该添加到类本身中。

4. objc_duplicateClass

作用

用于Foundation's Key-Value观察

声明

Class objc_duplicateClass(Class original, const char *name, size_t extraBytes);

参数

original

类original

name

类名称

extraBytes

在类的末尾和元类对象中为索引ivars分配的字节数(通常为0)。

建议

不要使用

第三篇 实例化Classes

1. class_createInstance

作用

实例化类,给类分配内存空间

声明

id class_createInstance(Class cls, size_t extraBytes);

参数

cls

类cls

extraBytes

分配额外的字节,附加字节可用于存储超出类定义中的其他实例变量。

返回值

cls实例

2. objc_constructInstance

作用

实例化类,给类分配指定内存空间

声明

id objc_constructInstance(Class cls, void *bytes);

参数

cls

类cls

bytes

指定内存地址

返回值

cls实例 或者 nil(如果cls、bytes为nil)

3. objc_destructInstance

作用

在不释放内存的情况下销毁类的实例并移除其所有的关联引用。

声明

void * objc_destructInstance(id obj);

建议

如果obj为nil,那么此方法不起作用

第四篇 实例操作

1. object_copy

作用

获取一个实例的copy

声明

id object_copy(id obj, size_t size);

参数

obj

Object-C对象

size

obj大小

返回值

obj的拷贝

2. object_dispose

作用

释放一个对象所占有的内存

声明

id object_dispose(id obj);

参数

obj

实例

返回值

nil

3. object_setInstanceVariable

作用

更改类实例的实例变量的值

声明

Ivar object_setInstanceVariable(id obj, const char *name, void *value);

参数

obj

类实例

name

实例变量名

value

实例变量改变后的值

返回值

指向name的IVAR数据结构的指针

4. object_setInstanceVariable

作用

获取类实例的实例变量的值

声明

Ivar object_getInstanceVariable(id obj, const char *name, void * _Nullable *outValue);

参数

obj

类实例

name

实例变量名

value

获取的实例变量的值

返回值

指向name的IVAR数据结构的指针

5. object_getIndexedIvars

作用

返回指定实例对象分配的所有额外字节的指针。

声明

void * object_getIndexedIvars(id obj);

参数

obj

实例

返回值

指向obj的额外字节的指针

6. object_getIvar

作用

获取实例变量值

声明

id object_getIvar(id obj, Ivar ivar);

参数

obj

类实例

ivar

变量的ivar指针

返回值

实例变量值或者 nil(如果obj为nil)

7. object_setIvar

作用

设置实例变量值

声明

void object_setIvar(id obj, Ivar ivar, id value);

参数

obj

类实例

ivar

变量的ivar指针

value

设置后的值

8. object_getIvar

作用

获取对象的类名

声明

const char * object_getClassName(id obj);

参数

obj

类实例

返回值

对象的类名

9. object_getClass

作用

获取对象的类

声明

Class object_getClass(id obj);

参数

obj

类实例

返回值

对象的类或Nil(如果obj为nil)

10. object_setClass

作用

设置对象的类

声明

Class object_setClass(id obj, Class cls);

参数

obj

类实例

cls

类对象

返回值

对象之前类或Nil(如果obj为nil)

收藏
0
sina weixin mail 回到顶部