文档章节

runtime

海二少
 海二少
发布于 2015/12/24 15:03
字数 597
阅读 211
收藏 0
 runtime : 运行时机制  
一、runtime是什么 
1> runtime是一个全动态语言,是基于c语言的库,里面包含了很多底层的C语言函数。 
2> 平时编写的OC代码, 在程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是OC方法的底层实现,换句话说oc的实现也就是runtime的底层调用。
下面来举个实例,(在前面的文章中讲到过了!通过编译成c语言,我们可以看到底层文件) 
OC : 
[[Person alloc] init] 
上面的Person对象创建时候, 
runtime : 
objc_msgSend(objc_msgSend(“Person” , “alloc”), “init”)
而上面这部分只是明白了最基础的原理,那么runtime又有哪些更深的运用呢? 
二、runtime能用来做什么?  
1> runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现可以通过runtime是实现)
2>在程序运行过程中, 动态创建一个类,例如:KVO的底层实现。
在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法。
遍历一个类的所有成员变量(属性)\所有方法
3.相关的头文件和函数 
1> 头文件
 

打开头文件,我们发现许多的方法,但是我们用的最多的是下面的函数, 
相关函数
objc_msgSend : 给对象发送消息
class_copyMethodList : 遍历某个类所有的方法
class_copyIvarList : 遍历某个类所有的成员变量
class_…..
当然,在使用这些东西的时候,我们首先要明白一些东西, 
必备常识 
1> Ivar : 成员变量 
2> Method : 成员方法
2> runtime相关实际应用
NSCoding(归档和解档, 利用runtime遍历模型对象的所有属性)
字典 –> 模型 (利用runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)
KVO(利用runtime动态产生一个类)
用于封装框架(想怎么改就怎么改)

© 著作权归作者所有

上一篇: CALayer
下一篇: UICollectionView
海二少
粉丝 0
博文 87
码字总数 48854
作品 0
程序员
私信 提问
go语言1.9.4版本编译报错

编译go文件时报以下错误: GOROOT=/home/lei/Documents/go #gosetup GOPATH=/home/lei/go #gosetup /home/lei/Documents/go/bin/go build -i -o /tmp/___go_build_main_go /home/lei/go/src/......

GodAKL
2018/04/11
374
0
go程序编译出现的错误总结(陆续更新)

错误一: /usr/local/go/src/runtime/map.go:64:2: bucketCntBits redeclared in this block previous declaration at /usr/local/go/src/runtime/hashmap.go:64:18 /usr/local/go/src/runti......

FLYUP_CHEN
01/21
0
0
开发的app 在小米手机上不能运行

这是在下面手机上运行的报错日志: 10-11 11:37:49.524: E/art(31965): Throwing OutOfMemoryError "Failed to allocate a 36 byte allocation with 0 free bytes and 0B until OOM" 10-11 1......

晚秋枫叶
2016/10/11
976
2
msgpack 真的比 protobuf buffers 快 4 倍吗?

hprose serialize Runtime:0.2334s json encode Runtime:15.2883s serialize Runtime:0.7090s msgpack_pack Runtime:0.6883s hprose unserialize Runtime:0.5439s json decode Runtime:24.29......

andot
2015/04/18
3.5K
4
Linux电源管理(11)_Runtime PM之功能描述

Linux电源管理(11)_Runtime PM之功能描述 作者:wowo 发布于:2014-10-8 23:32 分类:电源管理子系统 1. 前言 终于可以写Runtime PM(后面简称RPM)了,说实话,蜗蜗有点小激动。因为从个人的...

fybon
2018/07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员web前端分享逻辑运算

  一门计算机语言,编程的核心在于逻辑思想,当我们在编写程序的时候,逻辑是否通顺,是能否正确写出程序的关键,可以说如果你掌握了逻辑,那么你就踏入了计算机编程的大门。 &&与 || 或 ...

好程序员IT
5分钟前
0
0
我的Linux系统开始学习的过程

我的Linux系统开始学习的过程 Linux系统,不知大家是否了解。接触计算机不多或对计算机不感冒的人可能对其比较陌生,曾经的我也是。上大学前的我的确对Linux一无所知,那时候接触面窄,都没有...

linuxCool
5分钟前
0
0
让自己的网站可以被搜索

第一步:先注册一个属于自己的域名,这个域名是独一无二的。推荐到主机屋注册一个,其实在哪里注册都是一样的,但是主机屋提供免费的地址解析服务(只对在主机屋注册的域名免费)。 主机屋官...

WinkJie
8分钟前
0
0
全站加速(DCDN)- IP应用加速产品解读

5月22日下午15点,阿里云全站加速(DCDN)-IP应用加速如期发布。IP应用加速是阿里云自主研发的一款更高效、更安全、更便捷的动态加速产品,结合阿里云CDN本身的资源优势,利用就近接入、智能...

阿里云官方博客
11分钟前
0
0
k8s常用命令

1.创建deployment资源kubectl apply -f nginx.yml2.删除deployment资源kubectl delete -f nginx.yml3.查看deployment资源基本信息deployment资源(运行的服务资源)kubectl get...

平头哥-Enjoystudy
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部