RunTime的執行機制簡單使用

2021-07-16 08:38:14 字數 2185 閱讀 6185

runtime 是一套比較底層的純c語言api 它是oc的幕後工作者 我們平時寫的oc** ,在執行時都會編譯器轉為runtime的c語言** 其中最主要的是訊息機制oc的函式呼叫,成為訊息傳送 屬於動態呼叫過程 在編譯的時候並不能決定真正呼叫哪個函式事實證明,在編譯階段,oc可以呼叫任何函式,即使這個函式並未實現,只要申明過就不會報錯,而c語言在編譯階段就會報錯 只有在真正執行的時候才會根據函式的名稱找到對應的函式來呼叫。

runtime可以動態的給物件的屬性賦值,還可以修改屬性;

簡單的執行時

class bgcls = nsclassfromstring(@"bigbang");

id top = [[bgcls alloc] init];

[cat1 performselector:@selector(setname:) withobject:@"gd"];

nslog(@"name:%@",[top valueforkey:@"name"]);

首先通過obj的isa指標找到obj對應的class。在class中先去cache中 通過sel查詢對應函式method—cache中method列表是以key通過hash表來儲存的,這樣能提高函式查詢速度),若 cache中未找到。再去methodlist中查詢,若methodlist中未找到,則取superclass中查詢。若能找到,則將method加 入到cache中,以方便下次查詢,並通過method中的函式指標跳轉到對應的函式中

runtime可以動態的新增乙個類,它會通過類名獲取類,如果類不存在就會建立需要執行類父類,我們可以通過指定協議(protocol)的方式

執行如何新增乙個類

// 設定類名

const

char * classname = "myclass";

// 通過類名獲取類

class kclass = objc_getclass(classname);

// 如果類不能存在

if (!kclass)

// 3. 對類新增方法

imp myimp = imp_implementationwithblock(^(id _self, nsstring *string) );

// @encode(float) 用這個關鍵字可以獲取 引數型別

class_addmethod(kclass, @selector(sayhello:), myimp, "v@:@");

// 新增成員變數

// class_addivar

// 新增關聯屬性

// class_addproperty

// 新增協議

// class_addprotocol

// 註冊類

objc_registerclasspair(kclass);

// 如何獲取記憶體中所有的oc類

// 類的數量

int numclasses;

// 存放指向第乙個類的指標

class *classes = null;

// 獲取多少類

numclasses = objc_getclasslist(null, 0);

// 如果獲取的類大於0

if(numclasses > 0) */

// 通過協議來查詢我們需要的類

if(class_conformstoprotocol(cls, @protocol(animationprotocol)))

}free(classes);

}nslog(@"numclasses:%d",numclasses);

***************===華麗的分割線來了********************==

nsmutablearray* intercepterclasses = [nsmutablearray array];

int numclasses;

class * classes = null;

classes = null;

numclasses = objc_getclasslist(null, 0);

if (numclasses > 0 )}}

free(classes);

}}- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event

runtime執行機制

這篇文章主要介紹的是runtime是什麼以及怎麼用!希望對讀者有所幫助!第乙個問題,1 runtime實現的機制是什麼,怎麼用,一般用於幹嘛?runtime是一套比較底層的純c語言api,屬於1個c語言庫,包含了很多底層的c語言api。在我們平時編寫的oc 中,程式執行過程時,其實最終都是轉成了ru...

iOS之runtime執行機制初探

近有個新入職的同事問我關於 runtime機制 的問題,我想可能很多人對這個都不是太清楚,在這裡,和大家分享一下我對於runtime機制的理解。要深入理解runtime,首先要從最基本的類與物件開始,本文將詳細講解oc中類與物件的結構層次,後續將逐漸更新如何利用runtime操作類。所謂runtim...

session執行機制

session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表 的結構 也可能就是使用 雜湊表 來儲存資訊。當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 稱為sessionid,如果已包含乙個sessionid則說明...