id與instance的區別 動態繫結

2021-08-27 23:20:51 字數 1075 閱讀 7048

id型別 id

和void *

並非完全一樣。

id是指向struct objc_object的乙個指標,這個意思基本上是說,id是乙個指向任何乙個繼承了object(或者nsobject)類的物件。需要注意的是id是乙個指標,所以你在使用id的時候不需要加星號。比如id foo=nil定義了乙個nil指標,這個指標指向nsobject的乙個任意子類。而id *foo=nil則定義了乙個指標,這個指標指向另乙個指標,被指向的這個指標指向nsobject的乙個子類。

一、什麼是instancetype

instancetype是clang 3.5開始,clang提供的乙個關鍵字,表示某個方法返回的未知型別的objective-c物件。我們都知道未知型別的的物件可以用id關鍵字表示,那為什麼還會再有乙個instancetype呢?

二、關聯返回型別(related result types

根據cocoa的命名規則,滿足下述規則的方法:

1、類方法中,以alloc或new開頭

2、例項方法中,以autorelease,init,retain或self開頭

會返回乙個方法所在類型別的物件,這些方法就被稱為是關聯返回型別的方法。換句話說,這些方法的返回結果以方法所在的類為型別,說的有點繞口,請看下面的例子:

動態繫結

—在執行時確定要呼叫的方法

動態繫結將呼叫方法的確定也推遲到執行時。在編譯時,方法的呼叫並不和**繫結在一起,只有在消實傳送出來之後,才確定被呼叫的**。通過動態型別和動態繫結技術,您的**每次執行都可以得到不同的結果。執行時因子負責確定訊息的接收者和被呼叫的方法。執行時的訊息分發機制為動態繫結提供支援。當您向乙個動態型別確定了的物件傳送訊息時,執行環境系統會通過接收者的isa指標定位物件的類,並以此為起點確定被呼叫的方法,方法和訊息是動態繫結的。而且,您不必在objective-c **中做任何工作,就可以自動獲取動態繫結的好處。您在每次傳送訊息時,

特別是當訊息的接收者是動態型別已經確定的物件時,動態繫結就會例行而透明地發生

id與instance的區別 動態繫結

id型別 id 和void 並非完全一樣。id是指向struct objc object的乙個指標,這個意思基本上是說,id是乙個指向任何乙個繼承了object 或者nsobject 類的物件。需要注意的是id是乙個指標,所以你在使用id的時候不需要加星號。比如id foo nil定義了乙個nil指...

database和instance的區別

database 資料庫,一組相關的物理檔案,比如資料檔案 日誌檔案和控制檔案等等,是物理上實實在在存在的,即使關閉資料庫仍然存在。instance 例項。記憶體和一些程序,比如sga 後台程序 windows系統是執行緒 當關閉資料庫後例項消失。兩者是相輔相成的,經常在一起使用。我們以常見的資料庫...

控制代碼與ID的區別

控制代碼和id的區別 2007 01 24 21 51 31 分類 滄海拾貝 在windows程式設計中,控制代碼是無法精確定義的術語。隨便找乙個高手,讓他給你講講控制代碼是什麼,恐怕他都很難給你乙個具體的定義來。在windows程式設計中,控制代碼無所不在,視窗有視窗的控制代碼hwnd,執行緒和程...