Objective-C 中的特殊資料型別
我們在這裡解釋一下它們的細節:
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方法,那麼以下程式碼:
-
NSLog ( @"SEL=%s" , @selector ( blah) ) ;
會輸出為 SEL=blah。
說白了SEL就是返回方法名。
相關文章
- Redis 三種特殊資料型別Redis資料型別
- Redis 中三種特殊的資料型別Redis資料型別
- 【Redis】Redis的資料型別速查(5種基礎型別,5特殊型別)Redis資料型別
- .NET中的特殊型別成員 (轉)型別
- Java中的基本資料型別與引用資料型別Java資料型別
- Redis 三種特殊資料型別之 BitmapsRedis資料型別
- Java中的資料型別Java資料型別
- javascript中的資料型別JavaScript資料型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- Redis 三種特殊資料型別之 HyperloglogRedis資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- pandas中的series資料型別資料型別
- Hive中的集合資料型別Hive資料型別
- oracle中date資料型別與timestamp資料型別的轉換Oracle資料型別
- 特殊採購型別型別
- Javascript判斷資料型別的五種方式及其特殊性JavaScript資料型別
- Windows中的特殊資料夾Windows
- WebApplicationContext 中特殊的 bean 型別(二)--- LocaleResolverWebAPPContextBean型別
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- PHP7中的資料型別PHP資料型別
- Javascript 中的資料型別判斷JavaScript資料型別
- PowerShell中的基礎資料型別資料型別
- Oracle中的TIMESTAMP資料型別Oracle資料型別
- 【OpenCV教程】OpenCV中的資料型別OpenCV資料型別
- DB2 資料庫中的資料型別DB2資料庫資料型別
- [JS高程] 特殊的原始值型別JS型別
- Objective-C型別推斷Object型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- 自主資料型別:在TVM中啟用自定義資料型別探索資料型別
- oracle將表中date資料型別修改為timestamp資料型別Oracle資料型別
- DB2資料庫中的各資料型別DB2資料庫資料型別
- 1-02:MySQL中的資料型別MySql資料型別
- Java中的資料型別和運算子Java資料型別
- 關於oracle中的sql資料型別OracleSQL資料型別
- SQL Server 中的25種資料型別SQLServer資料型別
- SQL Server中易混淆的資料型別SQLServer資料型別
- ABAP中Char型別資料轉換成Decimal型別型別Decimal