這裡列出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]]) {…}
如果不想包含子類,就可以使用:
if( [theObject isMemberOfClass:[Member class]] {…}
六、nil和Nil
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;