文档章节

runtime讲解<一>

刀客445
 刀客445
发布于 2016/05/19 20:45
字数 786
阅读 58
收藏 0

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,还可以看看协议方法,此处略过

 

© 著作权归作者所有

共有 人打赏支持
刀客445
粉丝 2
博文 47
码字总数 10222
作品 0
杭州
私信 提问
LeadTools Android 入门教学——运行第一个Android Demo

LeadTools 有很多Windows平台下的Demo,非常全面,但是目前开发手机应用的趋势也越来越明显,LeadTools也给大家提供了10个Android的Demo,这篇文章将会教你如何运行第一个Android Demo,我想...

葡萄城控件技术团队
2015/03/26
0
0
Runtime的使用——利用Runtime将字典转成Model

关于runtime的知识已经有很多的讲解(传送门:对runtime的理解 http://www.jianshu.com/p/927c8384855a),但一直不知道runtime的使用场景, 接下来利用runtime实现将字典转换成model。希望大家...

啪神
2016/03/25
103
0
iOS Runtime的消息转发机制

前面我们已经讲解Runtime的基本概念和基本使用,如果大家对Runtime机制不是很了解,可以先看一下以前的博客,会对理解这篇博客有所帮助!!! Runtime基本概念:https://www.cnblogs.com/guo...

国孩
08/02
0
0
玩转iOS开发:装逼技术RunTime的应用(一)

文章分享至我的个人技术博客:cainrun.github.io/15065147177… 前面我们把的一些基本知识都了解了一遍, 知道了在的方法调用是属于消息传送的机制. 接着呢, 我们知道了每个类都有一个的结构体...

CainLuo
2017/10/13
0
0
runtime讲解

runtime的应用(1) 前面对runtime有了一个简单了解,可看了半天在应用在没什么用啊,那你就错了 啊,我想起来了,你前面不就要说应用吗,为毛等到现在,我还傻傻看完前一页,流量啊,其实我...

刀客445
2016/05/19
38
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 这就是不要女朋友的理由

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @狄安娜的猫 :分享丁家鑫的单曲《丁家鑫 - 克罗地亚狂想曲 - 古筝remix》 《丁家鑫 - 克罗地亚狂想曲 - 古筝remix》 手机党少年们想听歌,请...

小小编辑
20分钟前
79
6
CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
4
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
5
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部