Objective-C數據類型

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

[plain] view plaincopy
  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的用法:
   
[plain] view plaincopy
  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

    那麼我們還是看一個實例:
   
[plain] view plaincopy
  1.     BOOL isFinished=NO;//聲明一個BOOL變量並賦初始值爲假  
  2.     if(isFinished)       //如果爲真就執行括號中的語句  
  3.     {  
  4.     }  
  5.   
  6.     isFinished=YES;       //將isFinished變量賦值爲真  
  7.     if(isFinished)       //此時isFinished爲真,執行下面括號裏的語句  
  8.     {  
  9.     }  

    (3)nil代表一個空對象,相當於我們其他語言裏的NULL,在Obj-C中nil表示一個Objective-C對象的指針指向空,我們看一個實例:
   
[plain] view plaincopy
  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是如何使用的。
   
[plain] view plaincopy
  1.     SEL oneMethod=@selector(render);//聲明一個SEL變量,並且賦值爲方法render的指針  
  2.     [oneObject performSelector: oneMethod];//假設oneObject已經實例化,執行render方法  


    @selector關鍵字是Obj-C語言中專屬的關鍵字,作用就是得到一個方法指針。上面的例子中傳入名字爲render的方法,使得oneMethod成爲指向render方法的指針。oneObject假設是已經實例化的對象,通過調用performSelector方法來執行render方法,那麼這裏的performSelector方法是NSObject類中實現的方法,因爲每個Obj-C類都是繼承自NSObject類,所以所有實例化之後的對象都可以調用此方法。
發佈了16 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章