Objective-C 中的特殊資料型別

poplarbbs發表於2010-03-12

我們在這裡解釋一下它們的細節:

 

id

 

id和void *並非完全一樣。在上面的程式碼中,id是指向struct objc_object的一個指標,這個意思基本上是說,id是一個指向任何一個繼承了Object(或者NSObject)類的物件。需要注意的是id 是一個指標,所以你在使用id的時候不需要加星號。比如id foo=nil定義了一個nil指標,這個指標指向NSObject的一個任意子類。而id *foo=nil則定義了一個指標,這個指標指向另一個指標,被指向的這個指標指向NSObject的一個子類。

 

nil

 

nil和C語言的NULL相同,在objc/objc.h中定義。nil表示一個 Objctive-C物件,這個物件的指標指向空(沒有東西就是空)。

 

Nil

 

首字母大寫的Nil和nil有一點不一樣,Nil定義一個指向空的類(是Class,而不是 物件)。

 

SEL

 

這個很有趣。SEL 是“selector ”的一個型別,表示一個方法的名字。比如以下方法:

 

-[Foo count ] 和 -[Bar count ] 使用同一個selector ,它們的selector 叫做count

 

在上面的標頭檔案裡我們看到,SEL 是指向 struct objc_selector的指標,但是objc_selector是什麼呢?那麼實際上,你使用GNU Objective-C的執行時間庫和NeXT Objective-C的執行執行時間庫(Mac OS X使用NeXT的執行時間庫)時,它們的定義是不一樣的。實際上Mac OSX僅僅將SEL對映為C字串。比如,我們定義一個Foo的類,這個類帶有一個- (int ) blah方法,那麼以下程式碼:

 

  1. NSLog ( @"SEL=%s" , @selector ( blah) ) ;

 

 

會輸出為 SEL=blah。

 

說白了SEL就是返回方法名。

相關文章