iOS runtime总结
来源:互联网 发布:天猫双11数据直播网址 编辑:程序博客网 时间:2024/06/09 20:31
runtime 是一套比较底层的C级别的API,属于一个C语言库,报行了很多底层的C语言API。
我们所有的OC代码,在调用时,最终都会转成runtime的C语言代码,runtime算是OC的幕后工作者。
举个例子:[[foo alloc] init] ----->objc_msgSend(objec_msgSend("foo","alloc"),"init");
runtime属于OC的底层,可以进行易学OC不好是新的非常底层的操作。
1.在程序运行课程中,动态创建一个类(比如KVO的底层实现)
2.在程序运行过程中,动态的为某个方法为谋各类添加属性、方法,修改属性值或方法
3.遍历一个类的所有成员变量和所有方法
一般的动态语言为解释性语言,但OC能做到即使编译型语言,有事动态语言,得益于Runtime机制。
runtime如何使用:
1.class_copyPropertyList 获取一份拷贝的成员列表数组
2.property_getName 获取成员名称
3.class_getInstanceVariable 获取成员对象的lvar
4.object_getlvar 从lvar对象中取值
5.object_setlvar 赋值函数
顺便贴点小知识:Objective-C运行时定义了几种重要的类型。
Class:定义Objective-C类
Ivar:定义对象的实例变量,包括类型和名字。
Protocol:定义正式协议。
objc_property_t:定义属性。叫这个名字可能是为了防止和Objective-C 1.0中的用户类型冲突,那时候还没有属性。
Method:定义对象方法或类方法。这个类型提供了方法的名字(就是**选择器**)、参数数量和类型,以及返回值(这些信息合起来称为方法的**签名**),还有一个指向 代码的函数指针(也就是方法的**实现**)。
SEL:定义选择器。选择器是方法名的唯一标识符。
IMP:定义方法实现。这只是一个指向某个函数的指针,该函数接受一个对象、一个选择器和一个可变长参数列表(varargs),返回一个对象
#import <objc/runtime.h>
// propertyCount 成员属性的数量 unsigned int propertyCount = 0;objc_property_t *properties = class_copyPropertyList([self class], &propertyCount);//获取本类的成员变量的列表,使我们自己添加的属性,不是系统原先就有的 for (unsigned int i = 0; i < propertyCount; i++) { objc_property_t property = properties[i]; //获取成员的名称 NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; NSLog(@"propertyName = %@ -- 成员名称",propertyName); //获取成员内容的Ivar Ivar iVar = class_getInstanceVariable([self class], [propertyName UTF8String]); //其实上面那行获取代码是为了保险起见,基本是获取不到内容的。因为成员的名称默认会在前面加"_" , if (iVar == nil) { iVar = class_getInstanceVariable([self class], [[NSString stringWithFormat:@"_%@",propertyName] UTF8String]); } // 取值 id propertyVal = object_getIvar(self, iVar);//确定属性的值必须是对象才能用这个方法,不然会崩溃
NSLog(@"propertyVal = %@ --值",propertyVal);
http://blog.cocoabit.com/blog/2014/10/06/yi-li-jieobjective-cruntime/
http://www.tuicool.com/articles/R3Aryau
- iOS runtime总结
- IOS-Runtime学习总结
- iOS-runtime 完整总结
- iOS Runtime总结
- iOS Runtime总结
- iOS运行时(Runtime)总结
- iOS Runtime总结(一)
- iOS Runtime总结(二)
- iOS runtime forwardInvocation一些总结
- iOS Runtime常用示例总结
- ARCGIS RUNTIME FOR IOS总结(一)
- ARCGIS RUNTIME FOR IOS总结(二)
- ARCGIS RUNTIME FOR IOS总结(三)
- ARCGIS RUNTIME FOR IOS总结(四)
- ARCGIS RUNTIME FOR IOS总结(五)
- ARCGIS RUNTIME FOR IOS总结(六)
- iOS中runtime的使用总结
- 总结iOS中runtime的使用
- Could not change executable permissions on the application
- 数据结构实验10——稀疏矩阵
- struts学习笔记1
- struts 的传值问题
- django ckeditor.js找不到解决方法
- iOS runtime总结
- 关于限制Android横竖屏问题
- 【视频传输】二、Opencv结合socket进行视频传输(TCP协议)
- LeetCode N阶乘的尾数为0的个数
- UVa #10954 Add All (例题8-11)
- java连接网页
- qcom平台分析通话失败原因
- 给新建的Cocos2d-x 3.x 的Win32工程添加CocoStudio库
- 在Maven中新增自定的jar包