1. 程式人生 > >Runtime那些事兒(訊息機制)

Runtime那些事兒(訊息機制)

一、關於runtime

之前在專案中有遇到過用runtime解決改變全域性字型的問題,所以再一次感受到了runtime黑魔法的強大,趁現在有機會分享一下對runtime的一些理解。在物件呼叫方法是Objective-C中經常使用的功能,也就是訊息的傳遞,而Objective-C是C的超集,所以和C不同的是,Objective-C使用的是動態繫結,也就是runtime。Objective-C的訊息傳遞和訊息機制也就不多說了,今天主要說的是動態方法,也就是函式的呼叫。

二、相關的幾個函式

下面一張圖詳細的概括了每個函式呼叫的先後以及執行的前提

571495-5cd12b17d449bab1.png

訊息傳遞函式的呼叫

1.物件在收到無法解讀的訊息後,首先會呼叫所屬類的

1 + (BOOL)resolveInstanceMethod:(SEL)sel

這個方法在執行時,沒有找到SEL的IML時就會執行。這個函式是給類利用class_addMethod新增函式的機會。根據文件,如果實現了新增函式程式碼則返回YES,未實現返回NO。舉個例子,新建了一個工程,首先我在ViewController這個類中執行doSomething1這個方法,程式碼如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // //  ViewController.m //  RuntimeTest1 // //  Created by HenryCheng on 15/12/24. //  Copyright ?(版權符號) 2015年 www.igancao.com  All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [
super viewDidLoad]; [self performSelector:@selector(doSomething)]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

執行結果

1 2 3 **2015-12-24 10:35:37.726 RuntimeTest1[1877:337842] -[ViewController doSomething]: unrecognized selector sent to instance 0x7fe9f3736680** **2015-12-24 10:35:37.729 RuntimeTest1[1877:337842] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController doSomething]: unrecognized selector sent to instance 0x7fe9f3736680'

相關推薦

Runtime那些事兒訊息機制

一、關於runtime 之前在專案中有遇到過用runtime解決改變全域性字型的問題,所以再一次感受到了runtime黑魔法的強大,趁現在有機會分享一下對runtime的一些理解。在物件呼叫方法是Objective-C中經常使用的功能,也就是訊息的傳遞,而Obj

OpenSSL 有關密鑰的那些事兒HOWTO keys

sign som side note don ace quit ner tracking <DRAFT!> OpenSSL 有關密鑰的那些事兒(HOWTO keys) 1. 介紹(Introduction) Keys are the basis o

Arcgis javascript那些事兒二十——dojo中djconfig配置、dojo與requirejs專案衝突

一、引言       由於專案一部分使用requirejs另一部分地圖是用dojo開發(因為arcgis javascript使用的dojo),兩個要和到一起,所以要求研究下如何把兩者和到一起,花了兩天時間看了看requirejs與dojo,終於搞定了,跟大家

Go語言的那些事兒第一篇

Golang的特點 說明:本文大量借鑑了文章,在此表示感謝。 部署簡單 Golang編譯生成的是一個靜態可執行檔案,除了 glibc 外沒有其他外部依賴,完全不需要操心應用所需的各種包、庫的依賴關係,大大減輕了維護的負擔。 併發性好 Gorou

win32開發訊息機制

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】    win32真正的本質其實就是訊息機制。大家如果除錯win32程式,就會發現win32的應用其實是一個單執行緒程式碼,這至少說明windows提供的demo code是

runtime總結二之訊息機制包括訊息轉發,訊息交換的黑魔法

runtime的訊息機制 前面提到過編譯器最終會把我們的訊息傳送轉化為函式呼叫 訊息傳送 [object sendMassage] 首先編譯器會在執行時將上面的例子轉化為objc_msgSend(obj,@selector(sendMassage))這個

html頁面中拍照和上傳照片那些事兒

read itl 加載完成 大小 上傳照片 那些事 cnblogs 設置 新建 本文為原創,轉載請註明出處: cnzt 文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6895352.html 本文主要說下iOS上

分布式系統的那些事兒 - 系統與系統之間的調用

數據格式 轉換 處理 分布 互調 圖片處理 動作 人性 並且 系統與系統之間的調用通俗來講,分為本地同一臺服務器上的服務相互調用與遠程服務調用,這個都可以稱之為RPC通信。淺白點講,客戶訪問服務器A,此時服務器要完成某個動作必須訪問服務器B,服務器A與B互相通信,相互調用,

分布式系統的那些事兒 - MQ時代的通信

任務 會有 服務端 分布 ive 結果 團隊 並不會 短信 之前在講RPC通信的各種好處,特別好用,但是RPC並不是萬能的,也並不是適用於各種場景的,因為他是同步的;現如今很多場景下的調用都是異步的,系統A調用B後,並不需要知道B的結果,而且對B的結果無所謂,甚至你B掛了都

TCP 的那些事兒

fas 也說 alt hal 收獲 很好 浪費 服務器 book http://coolshell.cn/articles/11564.html TCP是一個巨復雜的協議,因為他要解決很多問題,而這些問題又帶出了很多子問題和陰暗面。所以學習TCP本身是個比較痛苦的過

TCP 的那些事兒

以及 int 不能 資源 body 快速 ssi oid ima http://coolshell.cn/articles/11609.html 這篇文章是下篇,所以如果你對TCP不熟悉的話,還請你先看看上篇《TCP的那些事兒(上)》 上篇中,我們介紹了TCP的協議

並發編程的那些事兒

接收 效率 n) imp UNC 程序 cli 異步 tip 1、生產者和消費者模型   作用:用於解耦。   原理:生產者將生產的數據放到緩存區,消費者從緩存區直接取。借助隊列來實現該模型(隊列就是緩存區)   隊列是安全的,自帶鎖機制。   q = Queue(

關於搶火車票的那些事兒

關於搶火車票的那些事兒(三) 上一節 中我們順利登陸了12306,但是你以為這樣就順利登陸了? 那麼你就錯了。。 登陸之後你還需要進行兩步的驗證,不然在進行其他操作的時候就容易被要求重新登陸。 上一節我們收到了資料

關於搶火車票的那些事兒

關於搶火車票的那些事兒(二) 在 上一節 裡面我們已經準備好了Cookie,這一節該準備正式登陸12306了~ 有一點要注意 User-Agent 這個內容的設定需要跟之前獲取Cookie的瀏覽器控制元件所

關於搶火車票的那些事兒

關於搶火車票的那些事兒(一) 又到了年底了,沒到這個時候外出工作的人兒又開始犯愁了火車票的事兒~ 票不好買,於是黃牛呀,各種搶票軟體走進了大家的事業。 搶票軟體到底是怎麼做的呢? 正好最近工作不忙,我也比較感興趣,那就來探究一下。

SyncNavigator資料同步那些事兒優化過程分享

WWW.SyncNavigator.CN    資料同步的軟體 SyncNavigator是一款專門用於SqlServer、Mysql資料同步的軟體,由國內頂級開發團隊開發完成,經歷8年逐步完善,目前具備強大的資料同步功能,國內很多大型連鎖超市,企業,公司都在用Sy

DeepFM演算法解析及Python實現 FFM演算法解析及Python實現 FM演算法解析及Python實現 詞嵌入的那些事兒

1. DeepFM演算法的提出 由於DeepFM演算法有效的結合了因子分解機與神經網路在特徵學習中的優點:同時提取到低階組合特徵與高階組合特徵,所以越來越被廣泛使用。 在DeepFM中,FM演算法負責對一階特徵以及由一階特徵兩兩組合而成的二階特徵進行特徵的提取;DNN演算法負責對由輸入的一階特徵進行全連線

linux磁碟與檔案系統管理的那些事兒2

我們接著第一篇文章講起。 檔案系統掛載與解除安裝 建立完檔案系統,我們需要將新建的檔案系統掛載到根檔案系統上的某個目錄上,進而我們便可以通過該目錄來訪問該檔案系統。建立這種關聯關係的過程稱為掛載,所掛載的目錄稱為掛載點;若解除這種關聯關係,則稱之為解除安裝; 由

C語言的那些事兒 迴圈結構程式設計

1.迴圈語句初認識:在不少實際問題中有許多具有規律性的重複操作,因此在程式中就需要重複執行某些語句。一組被重複執行的語句稱之為迴圈體,能否繼續重複,決定迴圈的終止條件。迴圈結構是在一定條件下反覆執行某段程式的流程結構,被反覆執行的程式被稱為迴圈體。迴圈語句是由迴圈體及迴圈的終止條件兩部

【工具類】Excel匯出那些事兒

      匯出Excel又有了新的需求,之前都是直接匯出list<T>,現需要匯出List<map>,並且需要動態建立表頭。如下: 【工具類】 引用jxl包   public class ListMapExpo