运行时Runtime的API
const char * class_getName(Class cls);
返回类的名称。
Class class_getSuperclass(Class cls);
返回类的超类。
Class class_setSuperclass(Class cls, Class newSuper);
设置给定类的超类。
BOOL class_isMetaClass(Class cls);
返回一个布尔值,指示类对象是否为元类。
size_t class_getInstanceSize(Class cls);
返回类的实例大小。
Ivar class_getInstanceVariable(Class cls, const char *name);
返回Ivar给定类的指定实例变量。
Ivar class_getClassVariable(Class cls, const char *name);
返回Ivar给定类的指定类变量。
BOOL class_addIvar(Class cls, const char *name, size_t size, uint8_t alignment, const char *types);
向类添加新的实例变量。
Ivar _Nonnull * class_copyIvarList(Class cls, unsigned int *outCount);
描述类声明的实例变量。
const uint8_t * class_getIvarLayout(Class cls);
返回Ivar给定类的布局描述。
void class_setIvarLayout(Class cls, const uint8_t *layout);
设置Ivar给定类的布局。
const uint8_t * class_getWeakIvarLayout(Class cls);
返回Ivar给定类的弱s 布局的描述。
void class_setWeakIvarLayout(Class cls, const uint8_t *layout);
设置Ivar给定类的弱s 的布局。
objc_property_t class_getProperty(Class cls, const char *name);
返回具有给定类的给定名称的属性。
objc_property_t _Nonnull * class_copyPropertyList(Class cls, unsigned int *outCount);
描述类声明的属性。
BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types);
向具有给定名称和实现的类添加新方法。
Method class_getInstanceMethod(Class cls, SEL name);
返回给定类的指定实例方法。
Method class_getClassMethod(Class cls, SEL name);
返回指向描述给定类的给定类方法的数据结构的指针。
Method _Nonnull * class_copyMethodList(Class cls, unsigned int *outCount);
描述类实现的实例方法。
IMP class_replaceMethod(Class cls, SEL name, IMP imp, const char *types);
替换给定类的方法的实现。
IMP class_getMethodImplementation(Class cls, SEL name);
返回在特定消息发送到类的实例时将调用的函数指针。
IMP class_getMethodImplementation_stret(Class cls, SEL name);
返回在特定消息发送到类的实例时将调用的函数指针。
BOOL class_respondsToSelector(Class cls, SEL sel);
返回一个布尔值,指示类的实例是否响应特定选择器。
BOOL class_addProtocol(Class cls, Protocol *protocol);
将协议添加到类中。
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);
替换类的属性。
BOOL class_conformsToProtocol(Class cls, Protocol *protocol);
返回一个布尔值,指示类是否符合给定协议。
Protocol * _Nonnull * class_copyProtocolList(Class cls, unsigned int *outCount);
描述了类所采用的协议。
int class_getVersion(Class cls);
返回类定义的版本号。
void class_setVersion(Class cls, int version);
设置类定义的版本号。
Class objc_getFutureClass(const char *name);
由CoreFoundation的免费桥接使用。
void objc_setFutureClass (
Class cls,
const char *name
);
由CoreFoundation的免费桥接使用。
Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes);
创建一个新类和元类。
void objc_disposeClassPair(Class cls);
销毁一个类及其相关的元类。
void objc_registerClassPair(Class cls);
注册使用分配的类。objc_allocateClassPair
Class objc_duplicateClass(Class original, const char *name, size_t extraBytes);
由Foundation的Key-Value Observing使用。
id class_createInstance(Class cls, size_t extraBytes);
创建类的实例,为默认malloc内存区域中的类分配内存。
id objc_constructInstance(Class cls, void *bytes);
在指定位置创建类的实例。
void * objc_destructInstance(id obj);
在不释放内存的情况下销毁类的实例并删除其任何关联的引用。
id object_copy(id obj, size_t size);
返回给定对象的副本。
id object_dispose(id obj);
释放给定对象占用的内存。
Ivar object_setInstanceVariable(id obj, const char *name, void *value);
更改类实例的实例变量的值。
Ivar object_getInstanceVariable(id obj, const char *name, void * _Nullable *outValue);
获取类实例的实例变量的值。
void * object_getIndexedIvars(id obj);
返回指向使用给定对象实例分配的任何额外字节的指针。
id object_getIvar(id obj, Ivar ivar);
读取对象中实例变量的值。
void object_setIvar(id obj, Ivar ivar, id value);
设置对象中实例变量的值。
const char * object_getClassName(id obj);
返回给定对象的类名。
Class object_getClass(id obj);
返回对象的类。
Class object_setClass(id obj, Class cls);
设置对象的类。
int objc_getClassList(Class _Nonnull *buffer, int bufferCount);
获取已注册的类定义列表。
Class _Nonnull * objc_copyClassList(unsigned int *outCount);
创建并返回指向所有已注册类定义的指针列表。
Class objc_lookUpClass(const char *name);
返回指定类的类定义。
id objc_getClass(const char *name);
返回指定类的类定义。
Class objc_getRequiredClass(const char *name);
返回指定类的类定义。
id objc_getMetaClass(const char *name);
返回指定类的元类定义。
const char * ivar_getName(Ivar v);
返回实例变量的名称。
const char * ivar_getTypeEncoding(Ivar v);
返回实例变量的类型字符串。
ptrdiff_t ivar_getOffset(Ivar v);
返回实例变量的偏移量。
void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
使用给定的键和关联策略为给定对象设置关联值。
id objc_getAssociatedObject(id object, const void *key);
返回与给定键的给定对象关联的值。
void objc_removeAssociatedObjects(id object);
删除给定对象的所有关联。
id objc_msgSend(id self, SEL op, …);
将具有简单返回值的消息发送到类的实例。
long double objc_msgSend_fpret(id self, SEL op, …);
将具有浮点返回值的消息发送到类的实例。
void objc_msgSend_stret(id self, SEL op, …);
将具有数据结构返回值的消息发送到类的实例。
id objc_msgSendSuper(struct objc_super *super, SEL op, …);
将具有简单返回值的消息发送到类的实例的超类。
void objc_msgSendSuper_stret(struct objc_super *super, SEL op, …);
将具有数据结构返回值的消息发送到类的实例的超类。
id method_invoke(id receiver, Method m, …);
调用指定方法的实现。
void method_invoke_stret(id receiver, Method m, …);
调用返回数据结构的指定方法的实现。
SEL method_getName(Method m);
返回方法的名称。
IMP method_getImplementation(Method m);
返回方法的实现。
const char * method_getTypeEncoding(Method m);
返回描述方法参数和返回类型的字符串。
char * method_copyReturnType(Method m);
返回描述方法返回类型的字符串。
char * method_copyArgumentType(Method m, unsigned int index);
返回描述方法的单个参数类型的字符串。
void method_getReturnType(Method m, char *dst, size_t dst_len);
通过引用返回描述方法返回类型的字符串。
unsigned int method_getNumberOfArguments(Method m);
返回方法接受的参数数。
void method_getArgumentType(Method m, unsigned int index, char *dst, size_t dst_len);
通过引用返回描述方法的单个参数类型的字符串。
struct objc_method_description * method_getDescription(Method m);
返回指定方法的方法描述结构。
IMP method_setImplementation(Method m, IMP imp);
设置方法的实现。
void method_exchangeImplementations(Method m1, Method m2);
交换两种方法的实现。
const char * _Nonnull * objc_copyImageNames(unsigned int *outCount);
返回所有已加载的Objective-C框架和动态库的名称。
const char * class_getImageName(Class cls);
返回类源自的动态库的名称。
const char * _Nonnull * objc_copyClassNamesForImage(const char *image, unsigned int *outCount);
返回指定库或框架中所有类的名称。
const char * sel_getName(SEL sel);
返回给定选择器指定的方法的名称。
SEL sel_registerName(const char *str);
使用Objective-C运行时系统注册方法,将方法名称映射到选择器,并返回选择器值。
SEL sel_getUid(const char *str);
使用Objective-C运行时系统注册方法名称。
BOOL sel_isEqual(SEL lhs, SEL rhs);
返回一个布尔值,指示两个选择器是否相等。
Protocol * objc_getProtocol(const char *name);
返回指定的协议。
Protocol * _Nonnull * objc_copyProtocolList(unsigned int *outCount);
返回运行时已知的所有协议的数组。
Protocol * objc_allocateProtocol(const char *name);
创建一个新的协议实例。
void objc_registerProtocol(Protocol *proto);
使用Objective-C运行时注册新创建的协议。
void protocol_addMethodDescription(Protocol *proto, SEL name, const char *types, BOOL isRequiredMethod, BOOL isInstanceMethod);
向协议添加方法。
void protocol_addProtocol(Protocol *proto, Protocol *addition);
将已注册的协议添加到正在构建的另一个协议中。
void protocol_addProperty(Protocol *proto, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount, BOOL isRequiredProperty, BOOL isInstanceProperty);
将属性添加到正在构建的协议中。
const char * protocol_getName(Protocol *proto);
返回协议的名称。
BOOL protocol_isEqual(Protocol *proto, Protocol *other);
返回一个布尔值,指示两个协议是否相等。
struct objc_method_description * protocol_copyMethodDescriptionList(Protocol *proto, BOOL isRequiredMethod, BOOL isInstanceMethod, unsigned int *outCount);
返回满足给定协议的给定规范的方法的方法描述数组。
struct objc_method_description protocol_getMethodDescription(Protocol *proto, SEL aSel, BOOL isRequiredMethod, BOOL isInstanceMethod);
返回给定协议的指定方法的方法描述结构。
objc_property_t _Nonnull * protocol_copyPropertyList(Protocol *proto, unsigned int *outCount);
返回协议声明的属性数组。
objc_property_t protocol_getProperty(Protocol *proto, const char *name, BOOL isRequiredProperty, BOOL isInstanceProperty);
返回给定协议的指定属性。
Protocol * _Nonnull * protocol_copyProtocolList(Protocol *proto, unsigned int *outCount);
返回协议采用的协议数组。
BOOL protocol_conformsToProtocol(Protocol *proto, Protocol *other);
返回一个布尔值,指示一个协议是否符合另一个协议。
const char * property_getName(objc_property_t property);
返回属性的名称。
const char * property_getAttributes(objc_property_t property);
返回属性的属性字符串。
char * property_copyAttributeValue(objc_property_t property, const char *attributeName);
给定属性名称,返回属性属性的值。
objc_property_attribute_t * property_copyAttributeList(objc_property_t property, unsigned int *outCount);
返回给定属性的属性属性数组。
void objc_enumerationMutation(id obj);
在foreach迭代期间检测到突变时由编译器插入。
void objc_setEnumerationMutationHandler(void (*handler)(id));
设置当前的变异处理程序。
IMP imp_implementationWithBlock(id block);
创建一个指向调用方法时调用指定块的函数的指针。
id imp_getBlock(IMP anImp);
返回与IMP使用创建的块关联的块。
BOOL imp_removeBlock(IMP anImp);
将块与IMP使用创建的块解除关联,并释放创建的块的副本。
id objc_loadWeak(id _Nullable *location);
加载弱指针引用的对象并返回它。
id objc_storeWeak(id _Nullable *location, id obj);
在变量中存储新值。__weak
———Class-Definition Data Structures
Class
表示Objective-C类的opaque类型。
Method
一个opaque类型,表示类定义中的方法。
Ivar
表示实例变量的opaque类型。
Category
表示类别的opaque类型。
objc_property_t
一个opaque类型,表示Objective-C声明的属性。
IMP
指向方法实现开始的指针。
SEL
定义表示方法选择器的opaque类型。
objc_method_description
定义Objective-C方法。
objc_method_list
objc_cache
方法调用的性能优化。包含最近使用的方法的指针。
objc_protocol_list
objc_property_attribute_t
定义属性属性。
———Instance Data Types
id
指向类实例的指针。
objc_super
指定实例的超类。
———Boolean Value
BOOL
键入以表示布尔值。
———Associative References
objc_AssociationPolicy
键入以指定关联的行为。
———Constants
Boolean Values
这些宏定义了方便的常量来表示布尔值。
Null Values
这些宏定义类和实例的空值。
Dispatch Function Prototypes
此宏指示是否必须将调度函数强制转换为适当的函数指针类型。
Objective-C Root Class
此宏将类注释为Objective-C根类。
Local Variable Storage Duration
此宏指示编译器在优化期间不应积极释放存储在某些局部变量中的值。
运行时Runtime的API的更多相关文章
- iOS运行时Runtime浅析
运行时是iOS中一个很重要的概念,iOS运行过程中都会被转化为runtime的C代码执行.例如[target doSomething];会被转化成objc)msgSend(target,@select ...
- Deep Learning部署TVM Golang运行时Runtime
Deep Learning部署TVM Golang运行时Runtime 介绍 TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型.TVM支持来自Te ...
- CUDA运行时 Runtime(一)
CUDA运行时 Runtime(一) 一. 概述 运行时在cudart库中实现,该库通过静态方式链接到应用程序库cudart.lib和libcudart.a,或动态通过cuda ...
- CUDA运行时 Runtime(四)
CUDA运行时 Runtime(四) 一. 图 图为CUDA中的工作提交提供了一种新的模型.图是一系列操作,如内核启动,由依赖项连接,依赖项与执行分开定义.这允许定义一次图形,然后重复启动.将 ...
- CUDA运行时 Runtime(二)
CUDA运行时 Runtime(二) 一. 概述 下面的代码示例是利用共享内存的矩阵乘法的实现.在这个实现中,每个线程块负责计算C的一个方子矩阵C sub,块内的每个线程负责计算Csub的一个元素.如 ...
- CUDA运行时 Runtime(三)
CUDA运行时 Runtime(三) 一.异步并发执行 CUDA将以下操作公开为可以彼此并发操作的独立任务: 主机计算: 设备计算: 从主机到设备的内存传输: 从设备到主机的存储器传输: 在给定设备的 ...
- “ compiler-rt”运行时runtime库
" compiler-rt"运行时runtime库 编译器-rt项目包括: Builtins-一个简单的库,提供了代码生成和其他运行时runtime组件所需的特定于目标的低级接口. ...
- 【原】iOS动态性(五)一种可复用且解耦的用户统计实现(运行时Runtime)
声明:本文是本人 编程小翁 原创,转载请注明. 为了达到更好的阅读效果,强烈建议跳转到这里查看文章. iOS动态性是我的关于iOS运行时的系列文章,由浅入深,从理论到实践.本文是第5篇.有兴趣可以看看 ...
- iOS 运行时runtime控制私有变量以及私有方法
OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动 ...
随机推荐
- 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)
No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...
- MVC5+EF6 入门完整教程1 :从0开始
https://www.cnblogs.com/miro/p/4030622.html 第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定& ...
- UI布局 自定义布局
今天学习了UI布局当中的自定义的布局的部分,在开始的时候先动手写了一个跟随手指移动的小兔子的实例,初步的了解了布局管理器的概念之后开始正式进行布局管理器,其中包括相对布局,线性布局,帧布局,表格布局, ...
- Java:面向对象的编程语言
java是面向对象的编程语言 Object,就是指面向对象的对象,对象就是实例. 在java里,对象是类的一个具体实例.就像:人,指一个类.你.我.他.张三.李四.王五等则是一个个具体的实例,也就是j ...
- Docker - 查看容器进程在宿主机的 PID
概述 查看 docker 进程, 在容器外的 pid 背景 docker 中运行的进程, 本质上是运行在 host 上的 这些进程, 在 host 上, 也可以有自己的 pid 如果某种情况下, 连不 ...
- 配置yum仓库:yum install 软件
1.一个重要模板: 进入/etc/yum.repos.d文件夹,新建一个xiaoxu.repo文件,其中xiaoxu可以根据需要来取名. [模板] vim xiaoxu.repo [rhel] ...
- intellij idea设置打开多个文件显示在多行tab上
- springboot中druid监控的配置(DruidConfiguration)
当数据库连接池使用druid 时,我们进行一些简单的配置就能查看到sql监控,web监控,url监控等等. 以springboot为例,配置如下 import com.alibaba.druid.su ...
- 关于video++,jsrun,有道笔记等的感想
这几天一直在思考切入点.想了很多,有关于给初创企业提供社交平台营销的,如公众号,小程序,支付宝的到位,附近等.这些初看起来可行,细想起来有一些根本不完备.如通过微小宝多平台客户端了解最热的内容,在内容 ...
- kafka高吞吐,低延迟的分布式消息队列
核心概念 broker是kafka的节点,多台broker集群就是kafka topic消息分为多个topic partition分区,topic划分了多个partition分区,存在负载均衡策略 每 ...