iOS runtime 執行時 二 深談

2021-07-10 11:06:02 字數 1525 閱讀 5373

attention!逆天的來了

我們在程式設計過程中,如果使用到了runtime(執行時),我們幾乎都是想動態的改變這個類的資訊,包括方法,屬性,balabala的,並且獲得這個類的一些資訊,等等,下面我們就來看看怎麼通過runtime提供的方法,來達到這些目的

1). 獲取 這個類的所有屬性

.h 檔案

@inte***ce

rtobj :nsobject

@property(nonatomic,copy)nsstring*name;

@property(nonatomic,copy)nsstring*weburl;

@property(nonatomic,copy)nsstring*imageurl;

@property(nonatomic,copy)nsstring*type;

-(void)sort;

@end

.m 檔案

#import

"rtobj.h"

@implementationrtobj

@end

獲取這個類的所有屬性,首先包含import

unsigned

int outcount =0;

ivar*vars = class_copyivarlist([rtobj class], &outcount);//獲取到所有的成員變數列表

//遍歷所有的成員變數

for(int i =0; i < outcount; i++)

列印結果

—_name–@」nsstring」

—_weburl–@」nsstring」

—_imageurl–@」nsstring」

—_type–@」nsstring」

然後你就可以 自己去擴充套件自己的程式設計思路了,需要注意的是,父類的屬相並不會列印出來,也就是 通過這個方法,獲取不到父類的 屬性

2).改變該類的物件的某乙個屬性的值

有這樣乙個物件

rtobj*rtobj =[[rtobj alloc]init];
現在通過 執行時提供的方法,來檢查裡面有沒有 name這個屬性,如果有就賦值,沒有不賦值,

rtobj*rtobj = [[rtobjalloc]init];

unsignedintoutcount =0;

ivar*vars =class_copyivarlist([rtobjclass], &outcount);//獲取到所有的成員變數列表

//遍歷所有的成員變數

for(inti =0; i < outcount; i++)

}nslog(@"******:%@",rtobj.name);

最後的列印結果是

iOS runtime執行時詳解

記錄一下之前的學習內容 viewcontroller.m中 棧 是高位址往低走 堆是低位址往高走 堆疊溢位 堆和棧 被分配到記憶體區域的兩邊 分別往中間儲存,存滿碰頭就會溢位 這是乙個方法 oc方法的本質 c函式 函式呼叫棧 void viewdidload self viewdidload 會導致...

iOS runtime 執行時 三 深談

引入 import nsobject object nsobject alloc init nsstring str runtime新增的變數 新增 屬性 objc setassociatedobject object,fyobjprokey,str,objc association copy 獲取...

ios Runtime 執行時機制

1.runtime 叫做執行時機制,其實oc也有執行時機制 訊息機制!我們oc中呼叫方法的時候,其實底層就是發訊息。2.c語言中,函式的呼叫在編譯的時候會決定呼叫哪個函式。3.oc當中的函式,屬於動態呼叫的過程,在編譯的時候並不能決定真正呼叫哪個函式,只有在執行的時候才會決定呼叫函式。那麼,現在就可...