為您揭開(kāi)runtime的神秘面紗
最近想換工作,本來(lái)信心滿(mǎn)滿(mǎn)的,可直到面試,才知道自己所掌握知識(shí)的薄弱的地方。于是針對(duì)面試薄弱,我開(kāi)始了runtime的學(xué)習(xí).以下將以我的學(xué)習(xí)過(guò)程來(lái)給大家講解runtime這個(gè)非常重要,但是又很寬泛的一個(gè)東西,希望給迷茫中的你一點(diǎn)幫助.也作為自己的學(xué)習(xí)筆記.
什么是runtime?
runtime直譯就是運(yùn)行時(shí)間,run(跑,運(yùn)行) time(時(shí)間),網(wǎng)上大家都叫它運(yùn)行時(shí),它是一套比較底層的純C語(yǔ)言API,屬于一個(gè)C語(yǔ)言庫(kù),包含了很多底層的C語(yǔ)言API,它是OC的幕后工作者,我們平時(shí)寫(xiě)的OC代碼,在運(yùn)行過(guò)程時(shí),都會(huì)轉(zhuǎn)為runtime的C語(yǔ)言代碼
runtime有什么用?
如果你之前不知道runtime,可能覺(jué)得它沒(méi)什么用,其實(shí)他的作用非常強(qiáng)大.下面我們就以代碼的形式為大家揭開(kāi)runtime的神秘面紗
作用1 獲取一個(gè)類(lèi)全部成員變量名(如果你的成員私有,也可以獲取到)
我們新建一個(gè)Person類(lèi),.h代碼如下
這些成員變量都是公有的,我們直接點(diǎn)開(kāi)頭文件就可以看到,如果是系統(tǒng)的類(lèi)呢,你是不是就不知道類(lèi)里面有哪些成員了,利用runtime可以輕松解決這個(gè)問(wèn)題,現(xiàn)在我們來(lái)測(cè)試一下,記得要加 #import
打印結(jié)果
你可以試一下,把所有的成員放到.m文件里面,它打印的結(jié)果是一樣的.
作用2 同理,我們可以獲取到一個(gè)類(lèi)的全部屬性名
打印結(jié)果:
作用3 獲取一個(gè)類(lèi)的全部方法
打印結(jié)果:
我們可以看到所有的方法
作用4 獲取一個(gè)類(lèi)遵循的所有協(xié)議
先將遵循的協(xié)議給注釋掉
測(cè)試代碼
結(jié)果啥都沒(méi)有打印出來(lái)
我們把遵循的代碼注釋給打開(kāi)
再執(zhí)行測(cè)試代碼,打印結(jié)果
是不是很棒,你可能覺(jué)得貌似用處不太大,那接下來(lái)我們來(lái)看看如何利用runtime歸檔和解檔.
作用5 歸檔/解檔
測(cè)試如下
打印結(jié)果:
是不是比你以前歸檔解檔簡(jiǎn)單多了。
runtime作用太大了,學(xué)習(xí)了才知道,這是我今天學(xué)習(xí)的過(guò)程和一點(diǎn)經(jīng)驗(yàn),后續(xù)我還會(huì)繼續(xù)把學(xué)習(xí)的過(guò)程分享給大家,希望能給你一些幫助.