runtime執行時機制

2021-07-10 17:48:56 字數 2205 閱讀 8006

1,說一下執行時機制

執行時機制:

1> runtime,執行時機制,它是一套c語言庫

2> 實際上我們編寫的所有oc**,最終都是轉成了runtime庫的東西,比如類轉成了runtime庫裡面的結構體等資料型別,方法轉成了runtime庫裡面的c語言函式,平時調方法都是轉成了objc_msgsend函式(所以說oc有個訊息傳送機制)

3> 因此,可以說runtime是oc的底層實現,是oc的幕後執行者

4> 有了runtime庫,能做什麼事情呢?runtime庫裡面包含了跟類、成員變數、方法相關的api,比如獲取類裡面的所有成員變數,為類動態新增成員變數,動態改變類的方法實現,為類動態新增新的方法等

執行時機制是c語言的一套框架,包含了很多c語言的api,我們寫的oc**,在程式執行時都會轉換成runtime c語言的**,所以說runtime算是oc的幕後工作者,舉個例子,比如 [[person alloc] init],執行時會變成 objc_msgsend(objc_msgsend(「person 」 「alloc」)」init」);

由於runtime是oc底層的,所以可以來實現oc不能實現的,或者很難實現的底層操作,

比如在程式執行中,動態的建立乙個類,kvo就是基於執行時機制來實現的,kvo的目的就是乙個物件監聽另乙個物件值得改變,kvo的內部實現是,當乙個類的某個物件第一次被觀察時,系統會在執行期動態的建立乙個派生類,重寫基類中任何被觀察屬性的setter方法,在派生類中重寫setter方法實現真正的通知機制

還可以動態的獲取乙個類的屬性,成員變數,方法,,協議資訊。 用於字典轉模型框架

還可以修改類的方法,屬性,比如交換方法,也就是常說的黑魔法。就是執行時動態的改變乙個物件的乙個方法。

還可以遍歷乙個類的成員變數和方法。比如歸檔,解檔

還可以封裝第三方框架,比如sdweiimage ,主要是給分類新增動態屬性,這樣可是使第三方框架更完善。

執行時的相關函式有

objc_msgsend  給物件發訊息

class_copymethodlist :遍歷某個類所以的方法

class_copyivarlist: 遍歷某個類所以的成員變數

runtime怎麼新增屬性方法

* class_addproperty

* class_addmethod

runtime的應用:

1.動態建立乙個類(比如kvo的底層實現)

2.動態地為某個類新增屬性\方法, 修改屬性值\方法

3.遍歷乙個類的所有成員變數(屬性)\所有方法

實質上,以上的是通過相關方法來獲取物件或者類的isa指標來實現的。

相關函式


1.  增加

增加函式:class_addmethod


增加例項變數:class_addivar

增加屬性:@dynamic標籤,或者class_addmethod,因為屬性其實就是由getter和setter函式組成

增加protocol:class_addprotocol (說實話我真不知道動態增加乙個protocol有什麼用,-_-!!)

2.  獲取

獲取函式列表及每個函式的資訊(函式指標、函式名等等):class_getclassmethod method_getname ...

獲取屬性列表及每個屬性的資訊:class_copypropertylist property_getname

獲取類本身的資訊,如類名等:class_getname class_getinstancesize

獲取變數列表及變數資訊:class_copyivarlist

獲取變數的值

3.    替換

將例項替換成另乙個類:object_setclass

替換類方法的定義:class_replacemethod

4.其他常用方法:

交換兩個方法的實現:method_exchangeimplementations.

設定乙個方法的實現:method_setimplementation.

必備常識
 1> ivar : 成員變數
  2> method : 成員方法

執行時特性:

oc中是傳送訊息(訊息結構):執行時所執行的**是由執行環境決定,函式呼叫的語言執行時執行的**,是由編譯器決定。oc重要的工作都由runtime component完成,runtime component本質是一種與開發者編寫的**相關連的dynamic library,這樣以來,只要更新runtime component即能提公升程式效能。

runtime 執行時機制

首先,第乙個問題,1 runtime實現的機制是什麼,怎麼用,一般用於幹嘛?這個問題我就不跟大家繞彎子了,直接告訴大家,runtime是一套比較底層的純c語言api,屬於1個c語言庫,包含了很多底層的c語言api。在我們平時編寫的oc 中,程式執行過程時,其實最終都是轉成了runtime的c語言 r...

runtime 執行時機制

必備常識 1.ivar 成員變數 2.method 成員方法相關應用 1.nscoding 歸檔和解檔,利用runtime遍歷模型物件的所有屬性 2.字典 模型 利用runtime遍歷模型物件的所有屬性,根據屬性名從字典中取出對應的值,設定到模型的屬性上 3.kvo 利用runtime動態產生乙個類...

runtime 執行時機制

runtime 執行時機制 一 runtime是什麼 1 runtime是乙個全動態語言,是基於c語言的庫,裡面包含了很多底層的c語言函式。2 平時編寫的oc 在程式執行過程中,其實最終都是轉成了runtime的c語言 runtime算是oc方法的底層實現,換句話說oc的實現也就是runtime的底...