iOS編譯時型別與執行時型別

2021-07-27 06:31:41 字數 546 閱讀 6621

首先我們來寫乙個物件 nsstring *obj = {[nsdata alloc] init];

一般來說我們寫完上面的**xcode會為我們提示乙個warning:incompatible pointer types intializing 'nsstring *' with an expression of type 'nsdara'提示我們的obj物件指向的是乙個nsdata的方法,而不是nsstring的,這個時候我們編譯xcode是以nsstring為編譯型別編譯的,如果繼續按照nssting型別的方法寫,理論上不會出錯誤

例如我們可以寫乙個nssting的類方法:

obj = [obj

:@"123"];

當我們寫完這個方法執行的時候就crash掉並且報出錯誤

這個很明顯我們在執行後原來的obj物件的型別就變成了nsdata型別了

我們可以得出結論,在我們寫**編譯的時候,xcode會按照我們賦予的指標型別來判斷型別,而我們通過執行的時候則是通過後面具體的例項化物件來判斷是什麼型別

C 中的執行時型別與編譯時型別

今天在看c 參考時明白了 什麼是c 的執行時型別與編譯時型別,記錄下來,以備查閱 相信很多剛學c 的人都對這兩個概念感到迷惑,其時並不難 以前太重於技術可用性,比如 asp.net中的datadrid怎麼用等問題,沒大研究過這方面 希望能對c 初學者有所幫助。請看如下 class aclass bc...

當編譯時型別與執行時型別不同時

class base public void display class derived extends base public void display public class test 以上 輸出結果為0 行的注釋表示執行順序 1 系統先為derived物件分配記憶體空間,有兩塊記憶體空間分別...

執行時型別識別

執行時的型別識別 rtti 分為兩類 1.typeid操作符 2.dynamic cast操作符 先看第二種 dynamic cast完成將基類型別的指標或者引用安全轉化為派生類型別的指標和引用。對於指標,如果轉化失敗,則將指標置為null,對於引用型別,因為沒有null,所以直接丟擲bad cas...