运行时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机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动 ...
随机推荐
- C++的多态总结(静态&动态)
什么是多态 顾名思义就是同一个事物在不同场景下的多种形态. 静态多态 我们以前说过的函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调用合适的函数,如果有合 ...
- AcWing 792. 高精度减法
https://www.acwing.com/problem/content/794/ #include<bits/stdc++.h> using namespace std; //判断是 ...
- Spark 中 GroupByKey 相对于 combineByKey, reduceByKey, foldByKey 的优缺点
避免使用GroupByKey 我们看一下两种计算word counts 的方法,一个使用reduceByKey,另一个使用 groupByKey: val words = Array("on ...
- python基于百度AI开发文字识别
很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...
- EntityFramework 根据时间筛选数据
需求:根据当前时间,获取条件合适的数据,其中截止时间只比较日期. 1. 运行会报错的版本: var lifeWorkEventBatch = clientRepositoryContainer.Lif ...
- RNGCryptoServiceProvider 生成订单号
先生成1~1000的随机数 class Program { // Create a new instance of the RNGCryptoServiceProvider. private stat ...
- casperJs的安装2
通过上面一节,以为能够顺利安装好phantom 没想到,根本没成功. 接着,通过github上下载项目,重新安装: 1.clone项目:[https://github.com/ariya/phanto ...
- 「题解」「JZOJ-4238」纪念碑
题目 在 \(N\times M\) 的网格中,有 \(P\) 个矩形建筑,求一个最大边长的正方形,使得网格中能找到一个放置正方形的地方,不会与建筑重合. 保证 \(N,M\le 10^6,P\le ...
- bugku 闪的好快
这是一道二维码的题目.保存图片祭出神器StegSolve.然后Analysis->Frame Browser.这里发现是18张图.也就是18张图片. 我拿手机一个挨着一个扫的.扫出来的结果是SY ...
- 最小生成树计数 模板 hdu 4408
题意是给定n个点,m条边的无向图,求最小生成树的个数对p取模. 用kruscal计算最小生成树时,每次取连接了两个不同联通块的最小的边.也就是先处理d1条c1长度的边,再处理d2条c2长度的边.长度相 ...