Objective-c 資料類型

來源:互聯網
上載者:User

     

這裡列出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;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.