runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...
運(yùn)行時(shí)機(jī)制,runtime庫里面包含了跟類、成員變量、方法相關(guān)的API,比如獲取類里面的所有成員變量,為類動(dòng)態(tài)添加成員變量,動(dòng)態(tài)改變類的方法實(shí)現(xiàn),為類動(dòng)態(tài)添加新的方法等 需要導(dǎo)入<objc/message.h><objc/runtime.h>?
?
1.是什么
1> runtime是一套比較底層的純C語言API, 屬于1個(gè)C語言庫, 包含了很多底層的C語言API
2> 平時(shí)編寫的OC代碼, 在程序運(yùn)行過程中, 其實(shí)最終都是轉(zhuǎn)成了runtime的C語言代碼, runtime算是OC的幕后工作者
3> 舉例:
OC :
[[MJPerson alloc] init]
?
runtime :
objc_msgSend(objc_msgSend("MJPerson" , "alloc"), "init")
?
2.用過么? 怎么用?
1> runtime是屬于OC的底層, 可以進(jìn)行一些非常底層的操作(用OC是無法現(xiàn)實(shí)的, 不好實(shí)現(xiàn))
* 在程序運(yùn)行過程中, 動(dòng)態(tài)創(chuàng)建一個(gè)類(比如KVO的底層實(shí)現(xiàn))
* 在程序運(yùn)行過程中, 動(dòng)態(tài)地為某個(gè)類添加屬性\方法, 修改屬性值\方法
* 遍歷一個(gè)類的所有成員變量(屬性)\所有方法
?
3.相關(guān)的頭文件和函數(shù)
1> 頭文件
* <objc/runtime.h>
* <objc/message.h>
?
2> 相關(guān)應(yīng)用
* NSCoding(歸檔和解檔, 利用runtime遍歷模型對(duì)象的所有屬性)
* 字典 --> 模型 (利用runtime遍歷模型對(duì)象的所有屬性, 根據(jù)屬性名從字典中取出對(duì)應(yīng)的值, 設(shè)置到模型的屬性上)
* KVO(利用runtime動(dòng)態(tài)產(chǎn)生一個(gè)類)
* 用于封裝框架(想怎么改就怎么改)
?
3> 相關(guān)函數(shù)
* objc_msgSend : 給對(duì)象發(fā)送消息
* class_copyMethodList : 遍歷某個(gè)類所有的方法
* class_copyIvarList : 遍歷某個(gè)類所有的成員變量
* class_.....
?
4.必備常識(shí)
1> Ivar : 成員變量
2> Method : 成員方法
?
轉(zhuǎn)載于:https://www.cnblogs.com/changxs/p/runtime.html
總結(jié)
以上是生活随笔為你收集整理的runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [部署]VM11下CentOS7mini
- 下一篇: import与require的区别