### 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庫。它是一門編譯型語言 也是一門動態型的語言 這裡強調...