1. 程式人生 > >Objective-C資料型別

Objective-C資料型別

一、  資料型別
Obj-C是C語言的超集,之前我們都知道了,所以Obj-C中的資料型別分為兩種:一種是基於C語言的基本資料型別;另一種是Obj-C特殊的資料型別。
1.  C語言基本資料型別
Obj-C基於C語言的基本資料型別有:int,float,double和char,那麼我們來看下書上的一個比較全面的例子,包括各個型別的賦值和輸出。

  1. #import <Foundation/Foundation.h>  
  2. int main (int argc,char *argv[])  
  3. {  
  4. NSAutoreleasePool * pool=[[NSAutorreleasePool alloc] init];    //宣告物件釋放池  
  5. int integerVar=100;                           //宣告int變數  
  6. float floatingVar=331.79;                                      //宣告float變數  
  7. double doubleVar=8.44e+11;                    //宣告double變數  
  8. char charVar='W';                        //宣告char變數  
  9. NSLog (@"integerVar=%i",integerVar);                //使用NSLog函式輸出  
  10. NSLog (@"floatingVar=%f",floatingVar);                //使用NSLog函式輸出  
  11. NSLog (@"doubleVar=%e",doubleVar);                //使用NSLog函式輸出  
  12. NSLog (@"doubleVar=%g",doubleVar);                //使用NSLog函式輸出  
  13. NSLog (@"charVar=%c",charVar);                    //使用NSLog函式輸出  
  14. [pool drain];                            //釋放物件釋放池  
  15. return 0;  
  16. }  
那麼上面這個例子的最終輸出結果為:

integerVar=100
floatingVar=331.79009
doubleVar=8.440000e+11
doubleVar=8.44e+11
charVar='W'

還有一些C語言裡也有的資料型別:
Long型
Long long型
Short型
Unigned型
signed型

2.  Obj-C的特殊資料型別
除了上面列出的常用資料型別以外,Obj-C還提供了幾個比較特殊的資料型別:id、BOOL、nil、SEL、YES和NO
    (1)在Obj-C中id可以用來標識任何類的物件,那麼實際上id是一個指標,並且指向一個類結構體,定義如下所示:
    Typedef struct objc_object{
    Class isa;
    }*id;
    那麼我們可以把id當成C語言的void*來理解,可以用它來對映任何物件型別,並且可以給它傳任何訊息,如果傳遞給它的訊息它不支援的話,就會返回異常。我們還是參照書上的一個例子來看下id的用法:
  1.     id object;        //宣告一個id型別的物件  
  2.     object=[[Car alloc] init];//例項化一個Car的物件並且傳遞給object,此時object是Car的物件  
  3.     [object run];        //呼叫Car的run方法  
  4.     object=[[Bike alloc] init]; //例項化一個Bike物件並傳遞給object,此時object是Bike的物件  
  5.     [object run];        呼叫Bike的run方法  


    (2)BOOL型別等同於C/C++中的bool型別,即其值只能是真(true)或假(false)。
    BOOL型別的定義如下:
    Typedef signed char BOOL

    Obj-C中的真和假的關鍵字是YES和NO,其實也就相當於我們常用的其他語言中的true和false。
    YES和NO的定義如下:
    #define YES (BOOL) 1
    #define YES (BOOL) 0

    那麼我們還是看一個例項:
  1.     BOOL isFinished=NO;//宣告一個BOOL變數並賦初始值為假  
  2.     if(isFinished)       //如果為真就執行括號中的語句  
  3.     {  
  4.     }  
  5.     isFinished=YES;       //將isFinished變數賦值為真  
  6.     if(isFinished)       //此時isFinished為真,執行下面括號裡的語句  
  7.     {  
  8.     }  

    (3)nil代表一個空物件,相當於我們其他語言裡的NULL,在Obj-C中nil表示一個Objective-C物件的指標指向空,我們看一個例項:
  1.     Car * myCar=nil;//宣告一個Car的變數並且賦值為空,此時myCar相當於空物件  
  2.     if(myCar)    //判斷myCar物件是否為空,如果為空就執行startEngine方法  
  3.     {  
  4.         [myCar startEngine];  
  5.     }  

    那麼如果我們直接去掉if判斷條件,在Obj-C中是不會做任何操作的,因為Obj-C中如果一個空物件呼叫任何方法,都是不會做任何操作的,但是像其他的語言中,比如C\C++\Java\C#等,這樣兒做是會報錯的。
    (4)SELselector的一個型別,,代表一個方法,等同於C語言中的函式指標,下面的這個例子說明SEL是如何使用的。
  1.     SEL [email protected](render);//宣告一個SEL變數,並且賦值為方法render的指標  
  2.     [oneObject performSelector: oneMethod];//假設oneObject已經例項化,執行render方法  


@selector關鍵字是Obj-C語言中專屬的關鍵字,作用就是得到一個方法指標。上面的例子中傳入名字為render的方法,使得oneMethod成為指向render方法的指標。oneObject假設是已經例項化的物件,通過呼叫performSelector方法來執行render方法,那麼這裡的performSelector方法是NSObject類中實現的方法,因為每個Obj-C類都是繼承自NSObject類,所以所有例項化之後的物件都可以呼叫此方法。

相關推薦

Objective-c 資料型別

這裡列出Objective-c中獨有資料型別: 一、字串     在Objective-c中,字串常量是由@和一對從引號括起的字串序列。比如:@"China"、@"objective-c"等都是合法的字串常量。 二、id型別    id型別是Objective-c中一個

Objective-C資料型別

一、  資料型別Obj-C是C語言的超集,之前我們都知道了,所以Obj-C中的資料型別分為兩種:一種是基於C語言的基本資料型別;另一種是Obj-C特殊的資料型別。1.  C語言基本資料型別Obj-C基於C語言的基本資料型別有:int,float,double和char,那麼

Objective-C資料型別和表示式

4.1資料型別和常量 Objective-C提供了4中基本的資料型別:int 、float、double、char 。 Objective-C中,任何數字,單個字元或者字串通常成為常量。 在程式碼清單4-1中使用了基本的Objective-C資料型別#import <

C# 資料型別轉換 顯式轉型、隱式轉型、強制轉型

C# 的型別轉換有 顯式轉型 和 隱式轉型 兩種方式。 顯式轉型:有可能引發異常、精確度丟失及其他問題的轉換方式。需要使用手段進行轉換操作。 隱式轉型:不會改變原有資料精確度、引發異常,不會發生任何問題的轉換方式。由系統自動轉換。  不同型別的資料進行操作(加減乘除賦值等等),是需要

.NET基礎之C#資料型別

(一)列舉變數 [public] enum 列舉名 { 值1, 值2, 值3, ...... } 例: public enum Gender { 男, 女 } //使用列舉變數 Gender sex = Gender.男; public:訪問修飾符 enum:宣告

C++資料型別

TCHAR 因為C++支援兩種字串,即常規的ANSI編碼(使用"“包裹)和Unicode編碼(使用L”“包裹),這樣對應的就有了兩套字串處理函式,比如:strlen和wcslen,分別用於處理兩種字串。 微軟將這兩套字符集及其操作進行了統一,通過條件編譯(通過_UNICODE和UNICO

C#資料型別轉換之string到int型陣列

已知: string str = "1,2,3,4,5" 問: 如何根據上述字串產生一個int[]陣列?(int[] intLst = {1,2,3,4,5}) 答: 首先:string strLst = str.Split( ',' )  然後:int[] int

C# 資料型別轉換 顯式轉型、隱式轉型、強制轉型

C# 的型別轉換有 顯式轉型 和 隱式轉型 兩種方式。 顯式轉型:有可能引發異常、精確度丟失及其他問題的轉換方式。需要使用手段進行轉換操作。 隱式轉型:不會改變原有資料精確度、引發異常,不會發生任何問題的轉換方式。由系統自動轉換。  不同型別的資料進行操作(加減乘除賦值等等),是需要進行 型別轉換 後,才能繼

OO_W2:C#資料型別C語言有什麼不同?

OO_W2_Question:(9月15日—9月21日)     C#資料型別和C語言有什麼不同?OO_W2_Answer:    討論中……ps: 請大家注意,9月21日後的回覆將不作計分。

C#與C++資料型別比較及結構體轉換

//c++:HANDLE(void *) —- c#:System.IntPtr //c++:Byte(unsigned char) —- c#:Sy

QT與C++資料型別轉換

Qt的資料型別與標準c++是不一樣的,在開發的時候,必然會涉及到很多資料型別的轉換。早已厭倦了百度QString轉QByteArray,QByteArray轉char*,QString轉string…。Qt的第一篇文章,就先來總結一下我用過的資料之間的轉換。 1、QString轉QByt

c#資料型別/變數/常量/計算機資料儲存(進位制之間的相互轉化)

一c#資料型別 注:值型別:值直接儲存在堆疊中(儲存空間小,呼叫速度快); 引用型別:值儲存在堆中(儲存空間大,呼叫速度慢) 1.值型別 a. 值型別變數可以直接分配給一個值.它們是從類System.ValueType中派生的. b.值型別直接儲存其值. c.值型別的例項通常是線上程棧上

跨平臺C/C++資料型別定義

1       需考慮問題1.1    編譯器執行作業系統 l        WINDOWS :  _WIN32、WIN32; l        UNIX/LINUX:  unix、__unix、__unix__;  l        SunOS/SOLARIS: _

C 資料型別

C 資料型別 在 C 語言中,資料型別指的是用於宣告不同型別的變數或函式的一個廣泛的系統。變數的型別決定了變數儲存佔用的空間,以及如何解釋儲存的位模式。 C 中的型別可分為以下幾種: 序號 型別與描述 1 基

c++:資料型別和運算子(與c語言的不同)

c++的標頭檔案與c語言的不同:c++增加的資料型別:結構體的區別:強制型別轉換:c語言需要括號+轉換型別來轉換;c++不需要括號,直接型別(引數),類似於函式的引數傳遞;動態分配記憶體空間:p3=ne

C++與C#資料型別對應關係總結

API與C#的資料型別對應關係表 API資料型別 型別描述 C#型別 API資料型別 型別描述 C#型別 WORD 16位無符號整數 ushort CHAR 字元 char LONG 32位無符號整數 int DWORDLONG 64位

C++ 資料型別;變數型別及其作用域。 ---day1

此篇部落格來自http://www.runoob.com/cplusplus/cpp-variable-scope.html 感謝!!! C++ 資料型別 使用程式語言進行程式設計時,需要用到各種變數來儲存各種資訊。變數保留的是它所儲存的值的記憶體位置。這意味著,當您建立一個變

c# - 資料型別之值型別,引用型別

c#資料型別分為值型別(Value types),引用型別(Reference types),以及指標型別(Pointer types),而指標型別只在不安全的程式碼中使用,本文不討論指標型別。 值型別的引用的本質是拷貝(copy),是創造一個新的記憶體單元來儲存,新記憶體單元

dev c++ 資料型別的範圍

環境: Dev-C++ 4.9.6.0 (gcc/mingw32), 使用-Wall編譯選項 基本型別包括位元組型(char)、整型(int)和浮點型(float/double)。定義基本型別變數時,可以使用符號屬性signed、unsigned(對於char、int),和長度屬性short、long(對

C資料型別的長度

本人最近看到了一種資料型別叫long long,很好奇它的長度和其他型別的區別,方便日後查閱,這裡整理一下C的資料型別: Type Bytes in Win32(64) Valu