ios中執行時學習筆記

2021-07-10 02:01:38 字數 1518 閱讀 3832

### 1.什麼是執行時?

```1> 執行時是一套純c語言的api(純c語言庫)

2> 編譯器最終都會將oc** 轉化 為執行時**

* clang -rewrite-objc ***.m

3> 利用執行時,可以做很多底層的操作,比如

* 動態新增物件的成員變數和成員方法

* 動態交換兩個方法的實現(特別是交換系統自帶的方法)

* 獲得某個類的所有成員方法、所有成員變數

```### 2.如何應用執行時?

```1> 將某些oc**轉為執行時**:**底層,比如block的實現原理

2> 攔截系統自帶的方法呼叫,比如攔截imagenamed:、viewdidload、alloc(什麼是ios swizzle,黑魔法,巫術)

3> 實現字典和模型的自動轉換

4> 實現分類也可以增加屬性(每個物件的屬性互不干擾)

5> 實現nscoding的自動歸檔和自動解檔

```### 3.執行時常用的函式

```1>

* method class_getclassmethod(class cls, sel name)

獲得某個類的類方法

* method class_getinstancemethod(class cls, sel name)

獲得某個類的物件方法

* void method_exchangeimplementations(method m1, method m2)

交換2個方法的實現

* void objc_setassociatedobject(id object, const void *key, id value, objc_associationpolicy policy)

將值value跟物件object關聯起來(將值value儲存到物件object中)

引數key:將來可以通過key取出這個儲存的值

引數policy:儲存策略(assign、copy、retain)

* id objc_getassociatedobject(id object, const void *key)

利用引數key將物件object中儲存的對應值取出來

* ivar *class_copyivarlist(class cls, unsigned int *outcount)

獲得某個類的所有成員變數(outcount會返回成員變數的總數)

* const char *ivar_getname(ivar v)

獲得成員變數的名字

* const char *ivar_gettypeencoding(ivar v)

獲得成員變數的型別

* void     free(void *);

釋放記憶體

(當c語言函式名中包含了copy、create、retain、new等詞語,那麼就需要在最後釋放資源)

2>

* void objc_msgsend(void)

給某個物件傳送某個訊息

```

執行時環境筆記

編譯原理與實踐 第七章 名詞 活動記錄 activation record 包括引數,狀態資訊,local data,臨時資料 stack frames 儲存在stack上的ar frame pointer 專門用於指向ar的暫存器 argument pointer ap 專門用於指向ar中引數部分...

簡單的實用iOS執行時

objective c語言盡可能許多決定推遲時間執行時編譯時間和鏈結。只要有可能,它動態地事情。這意味著語言需要的不僅僅是乙個編譯器,但也乙個執行時系統來執行編譯後的 執行時系統作為一種作業系統的objective c語言 這就是使語言文字工作。本文著眼於nsobject類和objective c程...

iOS中runtime 執行時 的簡單介紹與應用

最近學習到runtime這一塊知識了所以就總結一下,以備以後要用。但是由於runtime這一塊的知識比較多所以今天在這裡只是做乙個簡單的總結。一 什麼是runtime?objective c runtime是乙個實現objective c語言的c庫。它是一門編譯型語言 也是一門動態型的語言 這裡強調...