這里列出Objective-c中獨有數據類型:
一、字符串
? ? 在Objective-c中,字符串常量是由@和一對從引號括起的字符串序列。比如:@"China"、@"objective-c"等都是合法的字符串常量。
二、id類型
? ? id類型是Objective-c中一個比較獨特類型。
? ? 在概念上、類似Java中的Object類,可以轉換為任何數據類型。
? ? 換句話說,id類型的變量可以存放任何數據類型的對象。
? ? 在內部處理上,這種類型被定義為指向對象的指針,實際上是一個指向這種對象的實例變量的指針。
? ? 我們可以理解為id類型就是void*類型。但是它們兩個并非完全一樣。下面是id在objc.h中的定義:
- typedef?struct?objc_object?{??
- Class?isa;??
- }*id;??
? ? 從上面看出,id是指向struct objc_object的一個指針。也就是說,id是一個指向任何一個繼承了Ojbect(或者NSObject)類的對象。需要注意的是id是一個指針,所以在使用id的時候不需要加星號,比如: ? ? ?id n=nil;
例如:
- id?data;??
- data?=?person;??
- [data?print];??
- …??
- data?=?person1;??
- [data?put];??
- …??
三、BOOL
? ? ?在objc.h中,BOOL定義為:
- typedef?signed?char?BOOL;??
- #define?YES???(BOOL)1??
- #define?NO????(BOOL)0??
? ???從上面的定義,我們可以發現布爾變量的值是YES和NO,或0和1.
? ? ?如:
- BOOL?enable=NO;??
- enable=0;??
- if(enable?==?YES)?…??
- if(enable)?…??
- if(!enable)?…??
? ? ? ? ? 它類似于C語言中的TRUE和FALSH.
四、SEL
? ? 在Objective-c中,SEL是選擇器(selector)的一個類型。
? ? 選擇器就是指向方法的一個指針。我們可以理解為程序運行到這里時就會執行指定的方法。
? ? 例如:
- SEL?sel=@selector?(print);??
- ClassA?*classA?=?[[ClassA?alloc]init];??
- ClassB?*classB?=?[[ClassB?alloc]init];??
- [classA?performSelector:sel?withObject:nil];??
- [classB?performSelector:sel?withObject:nil];??
- ??
- SEL?selA=@selector?(print:);??
- SEL?selB=@selector?(print:age:);??
? ? 在上例中sel是指向print方法的指針,沒有指定它是屬于哪個類。因此,不同的類中都有print方法時可以調用上面的形式進行調用。
? ? 我們可以將SEL理解為函數指針,但它們之間并非完全一樣。
五、Class
? ?與Java類似,你可以使用Class類來獲得一個對象所屬的類。如:
? ?Class theClass = [theObject class]; ? ? ? //獲得theObject對象的class信息
? ?NSLog(@"類名是:%s",[theClass className]); //theObject對象的類名
? ?Class類有幾個常用的方法,如判斷某個對象是否為某個類(包含子類)的對象:
? ?if( [theObject isKindOfClass:[Member class]]) {…}
? ?如果不想包含子類,就可以使用:
? ?nil與C語言的NULL相同。在objc/objc.h中定義如下:
? ?#define nil 0 ? ? ?/* id of Nil instance */
? ?
? ?Nil與nil有點不一樣,Nil定義一個指向空的類(是Class,而不是對象)。具體定義如下:
? ?#define Nil 0 ? ? ?/* id of Nil class */
? ?如:
- ClassA?*classA?=?[[ClassA?alloc]init];??
- classA?=?nil??
- ??
- id?data;??
- data=nil;??
版權聲明:本文為博主原創文章,未經博主允許不得轉載。