日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...

發(fā)布時(shí)間:2025/3/20 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

運(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。