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當中的函式,屬於動態呼叫的過程,在編譯的時候並不能決定真正呼叫哪個函式,只有在執行的時候才會決定呼叫函式。那麼,現在就可...