国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Runtime

2019-11-09 14:11:04
字體:
來源:轉載
供稿:網友

1、什么是Runtime?

RunTime即運行時。就是程序在運行的時候的一些機制,其中最主要的是消息機制。對于C語言,函數的調用在編譯的時候會決定調用哪個函數。編譯完成之后直接順序執行。而OC的函數調用基于消息發送,屬于動態調用,在編譯的時候并不能決定真正調用哪個函數(事實證明:在編 譯階段,OC可以調用任何函數,即使這個函數并未實現,只要聲明過就不會報錯。而C語言在編譯階段就會報錯)。只有在真正運行的時候才會根據函數的名稱找 到對應的函數來調用。

2、Runtime有什么用?

Runtime的強大在于它能夠在程序運行時獲取并修改類的各種信息,包括獲取某個類的方法列表、屬性列表、變量列表,為某個類動態添加方法、屬性,修改某個類的方法屬性等等;

3、OC Runtime Library 部分相關函數

OC有一個Runtime的運行時庫(Runtime Library),其中包含很多C語言函數,我們可以通過這些函數來動態對某個類(包括自定義類和系統類)進行動態操作;一些常用函數: 1.Method class_getInstanceMethod(Class cls, SEL name) 獲取類中方法聲明的指針 2.IMP class_getMethodImplementation(Class cls, SEL name) 獲取類中方法實現的指針 3.IMP class_replaceMethod(Class cls, SEL name, IMP imp,const char *types) 替換類中某個方法的實現函數 4.void method_exchangeImplementations(Method m1, Method m2) 交換兩個方法的實現函數 5.BOOL class_addMethod(Class cls, SEL name, IMP imp,const char *types) 為某個類動態添加一個方法 6.void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 為某個對象設置關聯值 7.id objc_getAssociatedObject(id object, const void *key) 獲得某個對象的關聯值

4、代碼示例

新建一個簡單的Car類,為它添加兩個對象方法:run方法和stop方法。 Car.h 這里寫圖片描述

Car.m 這里寫圖片描述

1、在ViewControllerViewDidLoad方法中,為Car類動態添加一個clean方法

這里寫圖片描述

Log這里寫圖片描述

2、交換Car類中的run方法和stop方法的實現

這里寫圖片描述

Log這里寫圖片描述

3、替換Car類中的run方法的實現為ViewController中clean方法的實現

這里寫圖片描述

Log這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浠水县| 罗平县| 临泽县| 色达县| 神池县| 桓仁| 玛多县| 桐庐县| 高要市| 沈丘县| 大宁县| 依兰县| 江油市| 扎鲁特旗| 神农架林区| 彭山县| 东安县| 商城县| 道真| 台南县| 平昌县| 庆元县| 宁城县| 合阳县| 九江市| 扶绥县| 岢岚县| 南丰县| 石家庄市| 讷河市| 嘉定区| 枣阳市| 绥江县| 宝鸡市| 平安县| 温宿县| 屏南县| 科尔| 吉林市| 绵阳市| 博乐市|