文档章节

runtime讲解<一>

刀客445
 刀客445
发布于 2016/05/19 20:45
字数 786
阅读 56
收藏 0
点赞 2
评论 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
博文 36
码字总数 10222
作品 0
杭州
LeadTools Android 入门教学——运行第一个Android Demo

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

葡萄城控件技术团队 ⋅ 2015/03/26 ⋅ 0

iOS runtime原理

对于runtime机制,在网上找到的资料大概就是怎么去用这些东西,以及查看runtime.h头文件中的实现,当然这确实是一种很好的学习方法,但是,其实我们还是不会知道runtime底层编译成C++语言之后...

哥特复心 ⋅ 2014/08/03 ⋅ 3

Runtime的使用——利用Runtime将字典转成Model

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

啪神 ⋅ 2016/03/25 ⋅ 0

玩转iOS开发:装逼技术RunTime的应用(一)

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

CainLuo ⋅ 2017/10/13 ⋅ 0

runtime讲解

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

刀客445 ⋅ 2016/05/19 ⋅ 0

Vue2 源码漫游(一)

Vue2 源码漫游(一) 描述: 一、代码主线 文件结构1-->4,代码执行顺序4-->1 1.platforms/web/entry-runtime.js/index.js web不同平台入口; 2.runtime/index.js 为Vue配置一些属性方法 3....

daipeng7 ⋅ 2017/11/17 ⋅ 0

weblogic安装说明

因公司开发要求需安装weblogic服务做压力测试使用 安装步骤开始讲解 一.首先安装jdk 二.其次weblogic 三.步骤 1.创建用户加入到weblogic及root(后续有些执行权限问题即需要加入到root组) ...

暖暖miss ⋅ 2017/09/04 ⋅ 0

J2EE学习tomcat

一 tomcat 介绍: 1.Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持...

watertiger ⋅ 2016/12/20 ⋅ 0

runtime讲解

接着讲runtime的应用,也是最重要的 1.字典转模型 说的字典转模型很多人会想到KVC,然后重写 - (void)setValue:(id)value forUndefinedKey:(NSString *)key方法,为什么要重写呢,因为kvc字典...

刀客445 ⋅ 2016/05/21 ⋅ 0

部署基于 python wsgi web 框架的工程到函数计算

本文旨在介绍如何将基于 WSGI web 框架构建的工程部署到函数计算 python runtime 的具体操作过程,在介绍操作过程之前,先了解几个概念。 相关概念导读 函数计算 HTTP 触发器 HTTP 触发器是众...

cici是夏莞 ⋅ 05/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud 微服务 (六) 服务通信 RestTemplate

壹 通信的方式主要有两种,Http 和 RPC SpringCloud使用的是Http方式通信, Dubbo的通信方式是RPC 记录学习SpringCloud的restful方式: RestTemplate (本篇)、Feign 贰 RestTemplate 类似 Http...

___大侠 ⋅ 10分钟前 ⋅ 0

React创建组件的三种方式

1.无状态函数式组建 无状态函数式组件,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。 无状态函数式组...

kimyeongnam ⋅ 17分钟前 ⋅ 0

react 判断实例类型

今天在写组件的时候想通过判断内部子元素不同而在父元素上应用不同的class,于是首先要解决的就是如何判断子元素的类型。 这里附上一个讲的很全面的文章: https://www.cnblogs.com/onepixel...

球球 ⋅ 24分钟前 ⋅ 0

Centos7备份数据到百度网盘

一、关于 有时候我们需要进行数据备份,如果能自动将数据备份到百度网盘,那将会非常方便。百度网盘有较大的存储空间,而且不怕数据丢失,安全可靠。下面简单的总结一下如何使用 bypy 实现百...

zctzl ⋅ 37分钟前 ⋅ 0

开启远程SSH

SSH默认没有开启账号密码登陆,需要再配置表中修改: vim /etc/ssh/sshd_configPermitRootLogin yes #是否可以使用root账户登陆PasswordAuthentication yes #是都开启密码登陆ser...

Kefy ⋅ 40分钟前 ⋅ 0

Zookeeper3.4.11+Hadoop2.7.6+Hbase2.0.0搭建分布式集群

有段时间没更新博客了,趁着最近有点时间,来完成之前关于集群部署方面的知识。今天主要讲一讲Zookeeper+Hadoop+Hbase分布式集群的搭建,在我前几篇的集群搭建的博客中已经分别讲过了Zookeep...

海岸线的曙光 ⋅ 48分钟前 ⋅ 0

js保留两位小数方法总结

本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一、我们首先从经典的“四舍五入”算法讲起 1、四舍五入的情况...

孟飞阳 ⋅ 今天 ⋅ 0

python log

python log 处理方式 log_demo.py: 日志代码。 #! /usr/bin/env python# -*- coding: utf-8 -*-# __author__ = "Q1mi""""logging配置"""import osimport logging.config# 定义三种......

inidcard ⋅ 今天 ⋅ 0

mysql 中的信息数据库以及 shell 查询 sql

Information_schema 是 MySQL 自带的信息数据库,里面的“表”保存着服务器当前的实时信息。它提供了访问数据库元数据的方式。 什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,...

blackfoxya ⋅ 今天 ⋅ 0

maven配置阿里云镜像享受飞的感觉

1.在maven目录下的conf/setting.xml中找到mirrors添加如下内容,对所有使用改maven打包的项目生效。 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.al......

kalnkaya ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部