Objective C 一一 id型別

2021-08-07 12:56:56 字數 1470 閱讀 8940

id

是乙個資料型別

,並且是乙個動態資料型別

id是乙個資料型別

,並且是乙個動態資料型別

既然是資料型別

,所以就可以用來

1.定義變數

2.作為函式的引數

3.作為函式的返回值

靜態型別和動態型別

為什麼要有動態型別?

id資料型別與靜態型別

靜態型別:

將乙個指標變數定義為特定類的物件時,使用的是靜態型別,在編譯的時候就知道這個指標變數所屬的類,

這個變數總是儲存特定類的物件。

靜態資料型別的特點: 

在編譯時就知道變數的型別, 

知道變數中有哪些屬性和方法

在編譯的時候就可以訪問這些屬性和方法, 

> 通過靜態資料型別定義變數

,不能呼叫子類特有的方法

並且如果是通過靜態資料型別定義變數

,如果訪問了不屬於靜態資料型別的屬性和方法

,那麼編譯器就會報錯

person *p = [person new];

動態型別:

程式直到執行時才確定物件所屬的類

動態資料型別的特點:

>

在編譯的時候編譯器並不知道變數的真實型別

,只有在執行的時候才知道它的真實型別

> 通過動態資料型別定義變數

,可以呼叫子類特有的方法

>

通過動態資料型別定義的變數

,可以呼叫私有方法

>

並且如果通過動態資料型別定義變數

,如果訪問了不屬於動態資料型別的屬性和方法

,編譯器不會報錯

id obj = [person new];

//定義nsobject * 型別

nsobject* obj = [cat new];

cat *c = (cat*)obj;

[c eat];

id obj = [c at new];

[obj eat]; // 不用強制型別轉換

[obj test]; //可以呼叫私有方法

注意: 為了避免動態資料型別引發的執行時的錯誤

,一般情況下如果使用動態資料型別定義乙個變數

, 在呼叫這個物件的方法之前會進行一次判斷

,判斷當前物件是否能夠呼叫這個方法

id obj = [student new];

if ([obj iskindofclass:[student class]])

if ([obj ismemberofclass:[student class]])

Objective C 一一 OC類的本質

1 什麼是類?類是用來描述物件的,是一系列屬性和方法的集合 可以通過乙個類來建立乙個物件,物件訪問該類中的屬性和方法.2 類的本質.2.1 類可以建立物件,但類本身其實也是乙個物件,這個物件會在這個類第一次被使用的時候建立.只要有類物件,就可以通過類物件來建立例項物件.例項物件中有乙個isa指標,指...

Objective C基礎 id 構造方法

一 id id是萬能指標,能指向任何oc物件,相當於nsobject id型別的定義 typedef struct objc object id id的使用 id後面不要加 因為id本身就是指標型別 id p 類名 new id的侷限性 如果呼叫乙個不存在的方法,編譯器會立馬報錯 二 構造方法 1....

Objective C 類的定義

這次,我們介紹objective c是如何定義乙個完整的類。定義乙個類都包括哪些部分,為了簡單明瞭,更加直接,列舉了乙個20多行 的小例子。那麼,讓我們先看下面這個簡單的例子 1 2 3 4 5 6 7 8 9 10 11 import 引用foundation庫標頭檔案 inte cefracti...