1. 程式人生 > >iOS中runtime(執行時)的簡單介紹與應用

iOS中runtime(執行時)的簡單介紹與應用

最近學習到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;【賦值函式】

本來還想要多寫一些但是看了幾篇前輩們寫的幾乎已經把我要總結的涵蓋到裡邊了,所以在這裡就把我個人感覺幾個寫的比較好的文章連結附在下邊,希望能幫助到大家!也希望大家能指出我寫的文章中的錯誤,以便糾正!謝謝!

連結一(來自 cocoChina網站):http://www.cocoachina.com/ios/20141018/9960.html
連結二 (來自簡書):http://www.jianshu.com/p/927c8384855a
連結三 (來自簡書):http://www.jianshu.com/p/4f211020de05

我的另一篇在簡書上發表的cocoaPods的安裝與安裝時候的一些問題及處理辦法有需要的可以去看一看。
連結地址:(來自於簡書):http://www.jianshu.com/p/02556ca12ad5