最近學習到runtime這一塊知識了所以就總結一下,以備以後要用。但是由於runtime這一塊的知識比較多所以今天在這裡只是做乙個簡單的總結。
一、什麼是runtime?
objective-c runtime是乙個實現objective-c語言的c庫。它是一門編譯型語言、也是一門動態型的語言(這裡強調下oc是靜態型別語言),之前沒接觸runtime的時候也不覺著它有多重要,接觸之後才發現其實runtime挺強大的。就拿我們在ios開發中所使用的oc程式語言來講,oc之所以能夠做到即是編譯型語言,又能做到動態語言,就是得益於runtime的機制。
二、runtime的訊息機制
大家都知道在c語言裡邊的函式呼叫到了oc裡邊就變成了另外乙個名字,稱之為訊息傳送。即objc_msgsend,這就是利用了runtime的訊息機制特性,完成了乙個動態呼叫的過程。舉個能有代表性的例子說明一下吧,就比如:寫了乙個方法【receiver message】,receiver它在編譯的階段會向接收者傳送message這條訊息,可是它只是傳送了一條message訊息並沒有真正意義上的去做事情,而對於receive來講要如何響應這條訊息,其實是在執行的時候它才會將【receiver message】轉化成objc_msgsend(receiver, selector),【注釋:如果訊息含有引數的話則為:objc_msgsend(receiver, selector, arg1, arg2, …)。】其實就相對於這個例子而言,這個物件訊息的傳送與方法的真正實現是在程式執行階段才將其繫結在一起的,並不是編譯的階段完成的工作。如果訊息的接收者能夠找到對應的selector,那麼就相當於直接執行了接收者這個物件的特定方法;否則,訊息要麼被**,或是臨時向接收者動態新增這個selector對應的實現內容,要麼就乾脆玩完崩潰掉。
三、runtime中的相關定義及一些常見的方法
< 一、>相關定義
1、typedef struct objc_method *method;【 描述類中的乙個方法】
2、typedef struct objc_ivar *ivar;【例項變數】
3、typedef struct objc_category *category;【 類別category】
4、typedef struct objc_property *objc_property_t;【 類中宣告的屬性】
< 二、>常見的一些方法含義
1、class_copypropertylist ;【 獲取乙份拷貝的成員列表陣列】
2、property_getname;【獲取成員名稱】
3、class_getinstancevariable;【 獲取成員物件的ivar】
4、object_getivar從ivar;【物件中取值】
5、object_setivar;【賦值函式】
iOS執行時 Runtime 摘抄自網路
一 什麼是執行時 runtime 二 執行時的作用?三 案例 執行時獲取成員變數名稱 import import xmgperson.h import int main int argc,const char argv 如果函式名中包含了copy new retain create等字眼,那麼這個函...
執行時 RunTime 的理解
首先是 什麼是執行時 oc是執行時語言,只有在程式執行時,才會去確定物件的型別,並呼叫類與物件相應的方法.利用runtime機制讓我們可以在程式執行時動態修改類.物件中的所有屬性,方法 執行時是oc訊息機制的平台,例如函式的呼叫,在編譯的時候並不能決定真正呼叫哪個函式,只有在真正執行時的時候才會根據...
runtime 執行時機制
首先,第乙個問題,1 runtime實現的機制是什麼,怎麼用,一般用於幹嘛?這個問題我就不跟大家繞彎子了,直接告訴大家,runtime是一套比較底層的純c語言api,屬於1個c語言庫,包含了很多底層的c語言api。在我們平時編寫的oc 中,程式執行過程時,其實最終都是轉成了runtime的c語言 r...