iOS執行時 Runtime 摘抄自網路

2021-09-07 06:29:30 字數 2431 閱讀 6186

一、什麼是執行時(runtime)?

二、執行時的作用?

三、案例:執行時獲取成員變數名稱

#import #import "xmgperson.h"

#import int main(int argc, const char * argv) // 如果函式名中包含了copy\new\retain\create等字眼,那麼這個函式返回的資料就需要手動釋放 free(ivars); // ivar ivar = *ivars; // ivar ivar2 = *(ivars + 1); // nslog(@"%s %s", ivar_getname(ivar), ivar_getname(ivar2)); // 乙個ivar就代表乙個成員變數 // int *p; 指向int型別的變數 // ivar *ivars; 指向ivar型別的變數 } return 0; }

// 成員變數的數量

unsigned int outcount = 0; // 獲得所有的成員變數 ivar *ivars = class_copyivarlist([uitextfield class], &outcount); // 遍歷所有的成員變數 for (int i = 0; i// 取出i位置對應的成員變數 ivar ivar = ivars[i]; // 獲得成員變數的名字 nslog(@"%s", ivar_getname(ivar)); } // 如果函式名中包含了copy\new\retain\create等字眼,那麼這個函式返回的資料就需要手動釋放 free(ivars);

[array insertobject:foo atindex:5];

objc_msgsend(array, @selector(insertobject:atindex:), foo, 5);

typedef struct objc_object  *id;

- (id)dosomethingwithint:(int)aint{}

id dosomethingwithint(id self, sel _cmd, int aint){}

之前已經提過訊息分發,不過這只是一小部分功能。所有的執行時方法都有特定的字首。下面是一些有意思的方法:

class

ivar

method

method_getname, method_getimplementation, method_getreturntype等等
objc

property

protocol

sel2.1 classes and selectors from strings

- (void)parseobject:(id)object  else if ([[data type] isequaltostring:@"number"])  else if ([[data type] isequaltostring:@"array"])  } } - (void)parseobjectdynamic:(id)object  } - (void)parsestring:(nsstring *)astring {} - (void)parsenumber:(nsstring *)anumber {} - (void)parsearray:(nsstring *)aarray {}

2.2 method swizzling
#import  @inte***ce nsmutablearray (loggingaddobject) - (void)logaddobject:(id)aobject; @end @implementation nsmutablearray (loggingaddobject) + (void)load  - (void)logaddobject:(id)aobject  @end

動態繼承、交換

動態方法處理

+ (bool)resolveinstancemethod:(sel)aselector  return [super resolveinstancemethod:aselector]; }

訊息**

使用block作為method imp

imp myimp = imp_implementationwithblock(^(id _self, nsstring *string) ); class_addmethod([myclass class], @selector(sayhello:), myimp, "v@:@");

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的底...