本文有刪節:
整形數據(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 |
|
對於Objective-C的面向對象結構,例如方法的返回值id代替int作爲默認的返回值類型。(對於嚴格的C語言結構方法返回值的默認類型仍然是int)。
關鍵字nil被定義爲空對象一個值爲0的id。Id,nil和其他Objective-C基礎類型都是在頭文件objc/objc.h中定義的。
id被定義爲一個對象數據結構的指針:
1 2 3 4 5 |
|
每一個對象都有一個isa變量來表示它是哪個類的實例。由於類這個類型本身被定義爲一個指針,因此isa變量經常被稱爲“isa 指針”。
1 |
|
布爾類型(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形成標準以前,所以就形成了現在的這個樣子。