iOS開發Runtime那點事

2021-07-11 20:03:48 字數 2128 閱讀 6573

runtime從字面上的意思理解就是執行時間,run(跑,執行)time(時間),在ios中呢俗稱執行時,它是一套底層的純c語言api,屬於乙個c語言庫,包含了很多底層的c語言api,同時它也是oc的幕後工作者,我們平時寫的oc**在執行的過程中都會轉為runtime的c語言**。

注意哦:用到runtime的地方要匯入標頭檔案:objc/runtime.h

我們新建乙個person類,.h**如下:

#import 

/** * person類協議

*/@protocol

persondelegate

- (void) persondelegatetowork;

@end

@inte***ce

person : nsobject

#pragma mark - 屬性

@property (nonatomic,strong) nsstring *name; //姓名

@property (nonatomic,strong) nsstring ****; //性別

@property (nonatomic,assign) nsinteger age; //年齡

#pragma mark - 方法

- (void) eat;

- (void) work;

- (void) sleep;

@end

這些成員變數都是共有的,同時在.m檔案中我們新增私有屬性nsstring *job,下面看測試**:

/**

* 獲取乙個類的全部成員變數

*/- (void) getobjcallivars

//因為ivars不屬於oc物件,所以要記得釋放

free(ivars);

}

列印結果:

如上我們看到結果中不僅列印出了公有成員變數,同時私有成員變數也列印了出來。

/**

* 獲取乙個類的全部屬性名稱

*/- (void) getobjcallproperties

//非oc物件,記得釋放

free(properties);

}

列印結果:

* 獲取乙個類的全部方法

*/- (void) getobjcallmethod

//釋放

free(methods);

}列印結果:

使當前viewcontroller遵守person類的協議

* 獲取乙個類遵循的全部協議

*/- (void) getobjcallprotocol

//釋放

free(protocols);

}列印結果:

-(void)encodewithcoder:(nscoder *)acoder

//記得釋放

free(properties);

}-(instancetype)initwithcoder:(nscoder *)adecoder

//釋放

free(properties);

return

self;

}

/**

* 歸檔/解檔

*/- (void) decode

其實runtime的作用有太多太多了,今天就先給大家分享到這了。

原始碼請戳這裡runtime簡單使用

iOS開發Runtime那些事

objective c中的runtime是經常被問到的乙個問題,幾乎是面試大公司必問的乙個問題。當然還有一些其他問題也幾乎必問,例 如 runloop,block,記憶體管理等。本篇文章主要介紹runtime。runtime簡稱執行時。就是系統在執行的時候的一些機制,其中最主要的是訊息機制。對於c語...

iOS面試那點事

我在面試中遇到的一些問題 希望分享出來對大家有用 1 題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字以及條件判斷語句 a?b c 其實會有很多種解法,但是我只是了解 這個邏輯與的方式 因為 這個邏輯與利用了語言的特性 0代替bool值fal...

iOS開發 runtime機制

runtime簡稱執行時。就是系統在執行的時候的一些機制,其中最主要的是訊息機制。對於c語言,函式的呼叫在編譯的時候會決定呼叫哪個函式 c語言的函式呼叫請看這裡 編譯完成之後直接順序執行,無任何二義性。oc的函式呼叫成為訊息傳送。屬於動態呼叫過程。在編譯的時候並不能決定真正呼叫哪個函式 事實證明,在...