博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
runtime讲解<一>
阅读量:5757 次
发布时间:2019-06-18

本文共 2325 字,大约阅读时间需要 7 分钟。

hot3.png

1.runtime是什么?

runtime直译就是运行时间,run(跑,运行) time(时间),网上大家都叫它运行时,它是一套比较底层的纯C语言API,属于一个C语言库,包含了很多底层的C语言API,它是OC的幕后工作者,我们平时写的OC代码,在运行过程时,都会转为runtime的C语言代码

2.runtime在开发中有什么用?

看到这有人要说啦,程序本来就在运行,跑着,有叼用?哦NO,我又不是猴子派来的逗逼。没用我浪费唾沫,貌似今晚没吃好饭,一会去你家吃啊,别看,谁看就说谁。还是不要啦,接着看吧,不能因为我要去你家吃饭,你就错过精彩的一段啊。电视剧开了,主题来了。有不少人都用过MJExtension,喂,它是什么?别问,我又不是老师,自己谷歌去。查到了,json转model的吗,我会用,面试官来了,原理是什么?举头望明月,低头思原理,并不知道,pass.其实MJExtension实质就是应用runtime ,下面揭runtime的新娘遮盖头

(1)新建个model类Student

@interface Student : NSObject

 

#pragma mark - 属性

//姓名

@property (nonatomic, copy) NSString *name;

//性别

@property (nonatomic, copy) NSString *sex;

//年龄

@property (nonatomic, assign) NSInteger age;

//分数

@property (nonatomic, assign) float score;

#pragma mark - 方法//做完作业

- (void)finish:(NSString *)name;

//考试(学生时代的苦逼事,上班时代的向往事啊)

- (void)exam;

@end

现在我想知道有哪些属性,看看runtime是怎么干的

//添加私有变量@interface Student ()//班级@property (nonatomic, copy) NSString *class;@end//获得类的所有成员变量名- (void)test1{	unsigned int count;	//获得成员变量的结构体	Ivar *ivars = class_copyIvarList([Student class], &count);	for (int i = 0; i < count; i++) {		Ivar ivar = ivars[i];		//获得成员变量的名称		const char *name = ivar_getName(ivar);		//因为runtime是基于c语言的,获得的是c字符串,转成oc字符串		NSString *key = [NSString stringWithUTF8String:name];				NSLog(@"%zd--- %@", i, key);			}//这是干嘛的,不给你说,哪能什么都告诉你啊free(ivars);}

上面查看了所有成员变量,现在看看所有属性名

//获得类的所有属性名- (void)test1{	unsigned int count;	//获得成员变量的结构体	objc_property_t *propertys = class_copyPropertyList([Student class], &count);	for (int i = 0; i < count; i++) {		objc_property_t property = propertys[i];		//获得成员变量的名称		const char *name = property_getName(property);		//因为runtime是基于c语言的,获得的是c字符串,转成oc字符串		NSString *key = [NSString stringWithUTF8String:name];				NSLog(@"%zd--- %@", i, key);			}//此处必须释放,我都ARC了,释放什么啊,ARC那是什么,我表示不知道,它是释放的是Foundation对象,也就是OC对象,可我现在用的是coreFoundation啊,和你ARC有啥关系,好吧,我被说服了,放就放吧,逼着难受	free(propertys);}

查看student的所有方法

- (void)test3{	unsigned int count;	Method *methods = class_copyMethodList([Student class], &count);	for (int i = 0; i < count; i++) {		Method method = methods[i];		//获取方法		SEL methodSEL = method_getName(method);		//将方法转化为c字符串		const char *name = sel_getName(methodSEL);		//转化为oc字符串		NSString *key = [NSString stringWithUTF8String:name];				NSLog(@"%zd--- %@", i, key);	}	free(methods);}

ofcourse,还可以看看协议方法,此处略过

 

转载于:https://my.oschina.net/u/2607703/blog/678197

你可能感兴趣的文章
常量强制数据类型转化
查看>>
第一次购买域名并没有购买主机如何备案
查看>>
开学季,你要的激活函数都在这里
查看>>
终于可以向重复的鉴权代码说byebye 了 -- (玩转 AOP和Annotation )
查看>>
精通SpringBoot——第九篇:整合Swagger在线文档
查看>>
开发工具总结(10)之Flutter从配置安装到填坑指南详解
查看>>
敏捷战网获千万级天使轮融资,布局未来智慧警务
查看>>
4_2 最大公约数和最小公倍数
查看>>
开发者报 | Github造假产业链曝光,花钱就能买Star;黑客又多一个可以偷你密码的方法了...
查看>>
git 相关开发常用
查看>>
编码服务正在步入云端
查看>>
设计模式原则
查看>>
都在说微服务,那么微服务的反模式和陷阱是什么(二)
查看>>
大数据实时流处理零数据丢失
查看>>
Google用机器学习把各种鸟叫整合成一张互动图,而且开源了代码
查看>>
如何利用procfs读取iSCSI Initiator IQN信息
查看>>
Inxi:获取Linux的系统和硬件信息
查看>>
Linux命令汇总
查看>>
6\MySQL 主从同步 、 MySQL 读写分离 、 MySQL 性能调优
查看>>
AIX 上使用NFS实现AIX之间文件网络共享
查看>>