Objective-C 2.0數據類型

本文有刪節: 

整形數據(int)

Objective-C中的int型可以存儲正的或者負的整數(即沒有小數位),整形(int)的位數依賴於目標機,在編譯期決定,一般是32位或者64位,這個取決於程序運行平臺的CPU。值得注意的是,有時候操作系統也會起到作用,比如,CPU是64位,但是跑的操作系統是32位的,那麼int只能是32位的。

在32位系統上,無符號的整形(unsigned int)的範圍是0到4294967295。在64位系統上,這個範圍是0到18,446,744,073,709,551,615。對於有符號的整形,這兩個範圍分別爲−2,147,483,648到+2,147,483,647和−9,223,372,036,854,775,808到+9,223,372,036,854,775,807。

所以,在寫Objective-C的程序的時候,你唯一可以假設的是,int型至少是32位。

譯者注:在iOS上,int是32位的。

缺省的情況下,int是使用十進制的數來進行賦值的,如果你想使用八進制進行賦值,請在數據前面加入一個0。如下所示:

int myoctal = 024;

同樣的,0x開頭的標識16進制:

int myhex = 0xFFA2;

字符型(char)

Objective-C的char類型是用來保存單個字符的,類似於英文字母,十進制的數字或者標點符合。下面是這樣的例子:

char myChar = 'w';
char myChar = '2';
char myChar = ':';

轉義字符 

除了上面這些普通的字符,有時候我們需要一些特殊的字符來標識特殊的含義,比如回車換行,tab等,這些特殊的字符是以反斜槓'\'開頭的,比如下面的這個就是標識回車換行:

char newline = '\n';

任何以反斜槓'\'開頭的都是轉義字符,那麼我們如何在字符串中標識反斜槓那?答案是兩個反斜槓,如下所示:

char myslash = '\\'; Assign a backslash to a variable

下面是常用的轉義字符的列表:

\a - Sound alert
\b - Backspace
\f - Form feed
\n - New line
\r - Carriage return
\t - Horizontal tab
\v - Vertical tab
\\ - Backslash
\" - Double quote (used when placing a double quote into a string declaration)
\' - Single quote (used when placing a double quote into a string declaration)

浮點類型(float)

float在Objective-C中標識浮點類型的數據,即有小數部分的數據,例如456.12。一般情況下,這樣的數據被編譯程序識別爲另一種類型(Double,雙浮點類型),所以在賦值給float類型的時候,在數據後面加上一個f即可,就像下面這個樣子:

float myfloat = 123.432f

當我們表示一個很大的浮點數的時候,我們可以使用科學計數法,即後邊跟一個eX,X標識一個數字,比如67.7 x 104可以表示成下面的樣式: 

float myfloat = 67.7e4

雙精度浮點類型(double)

Objective-C中的double 數據類型用來存儲比float類型更大的數據,double這個詞來自於它用來存儲的bit大小是float的兩倍,就像上一節提到的那樣,浮點數據是一個double類型,除非它跟一個f來標識是一個float類型。

id類型

你會在本書後面的章節看到,Objective-C是一個面向對象的語言,面嚮對象語言是用類的對象來重用代碼的,調用對象的方法被來實現邏輯功能,這些方法需要傳入參數和返回一些值,這些類型可能也是一個對象,id就是一個通用的用來指向一個對象。

譯者注:

在Objective-C中對象的標識符是一個單獨的數據類型:id。這種類型是一種通用的類型可以是各種對象不管是什麼類,可以是一個類的實例也可以是類對象本身。

1
id anObject;

對於Objective-C的面向對象結構,例如方法的返回值id代替int作爲默認的返回值類型。(對於嚴格的C語言結構方法返回值的默認類型仍然是int)。

關鍵字nil被定義爲空對象一個值爲0的id。Id,nil和其他Objective-C基礎類型都是在頭文件objc/objc.h中定義的。

id被定義爲一個對象數據結構的指針:

1
2
3
4
5
typedef struct objc_object {
 
    Class isa;
 
} *id;

每一個對象都有一個isa變量來表示它是哪個類的實例。由於類這個類型本身被定義爲一個指針,因此isa變量經常被稱爲“isa 指針”。

1
typedef struct objc_class *Class;

布爾類型(BOOL)

就像其他語言一樣,Objective-C也有一個用來保存true和false的數據類型,布爾類型,這個類型使用關鍵詞_Bool或BOO來表示 ,下面的表示法都是合法的:

_Bool flag = 0;
BOOL secondflag = 1;

譯者注:和C++裏面的bool不一樣,BOOL只是一個signed char,YES=1,NO=0,只是一個約束,實際上你可以付給BOOL,YES和NO以外的值,在使用其他的數賦給一個布爾類型的時候,只取低八位,那麼就造成下面的問題,0x2300賦給一個布爾類型的時候,布爾類型的值是NO。大家一定要注意這個。

Objective-C中數據類型修飾符

目前位置,我們看到的都是Objective-C中的基本數據類型。在上面的數據類型的基礎上,Objective-C還有一些修飾符來對這些數據類型進行擴張。.

long型

long用來擴展一個數據類型的數據範圍,比如,下面的調用就是擴張了int型的數據:

long int mylargeint;

數據範圍被擴張到何種程度是由系統決定的,所以在很多系統上,long int和int其實一樣的。long同樣可以用來修飾double型:

long double mydouble;

譯者注:long可以在iOS中單獨使用,相當於long int,但是它的大小還是32位的,如果你希望使用64位的數據,請使用long long。


long long型

你可以認爲long long是一個更長的long,因此,程序中的long long總是64位的,long long只用來修飾int, long long int和long long相同。

long long int mylargeint;

short型

目前我們看到的都是增加存儲空間的修飾符,那麼相反的也有減少存儲空間的修飾符,short,它只修飾int,short int是一個16位的整形,範圍從−32,768到+32,767:

short int myshort;

有符號和無符號signed / unsigned

缺省的,一個整形是有符號的。換句話說,即編譯器會認爲一個整形變量會存儲正數,也可能存的是負數。這樣就限制了正負數的範圍,比如,32位的整形的最大值在無符號的時候可以達到4,294,967,295。但是實際中,由於有負數的存在,所以它的範圍就是−2,147,483,648到+2,147,483,647。如果我們知道一個整形從來不會被用來存儲負數,那麼我們可以聲明它爲無符號的,就是用unsigned修飾,它的範圍就是0到+4,294,967,295。聲明方式如下:

unsigned int myint;

上面的修飾符可以組合使用,比如聲明一個無符合的短整形:

unsigned short int myint = 10;

注意在unsigned, signed, short和long 修飾整形的時候,關鍵詞int可以省略,下面就是這樣的例子:

short myint;
long myint;
unsigned myint;
signed myint;

小結

Objective-C在基本數據類型方面,是和其他語言一樣的。

譯者注:Objective-C是標準C的擴展,所以基本類型和C語言差不多,不過要注意布爾型,這個類型的定義是在C形成標準以前,所以就形成了現在的這個樣子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章