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...