程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Objective-c 數據類型

Objective-c 數據類型

編輯:關於C語言

這裡列出Objective-c中獨有數據類型:


一、字符串

在Objective-c中,字符串常量是由@和一對從引號括起的字符串序列。比如:@China、@objective-c等都是合法的字符串常量。

 

二、id類型
id類型是Objective-c中一個比較獨特類型。
在概念上、類似Java中的Object類,可以轉換為任何數據類型。
換句話說,id類型的變量可以存放任何數據類型的對象。
在內部處理上,這種類型被定義為指向對象的指針,實際上是一個指向這種對象的實例變量的指針。

我們可以理解為id類型就是void*類型。但是它們兩個並非完全一樣。下面是id在objc.h中的定義:

 

[cpp]
  1. typedef struct objc_object {
  2. Class isa;
  3. }*id;
    從上面看出,id是指向struct objc_object的一個指針。也就是說,id是一個指向任何一個繼承了Ojbect(或者NSObject)類的對象。需要注意的是id是一個指針,所以在使用id的時候不需要加星號,比如:

     

    id n=nil;

    例如:

     

    [cpp]
    1. id data;
    2. data = person;
    3. [data print];
    4. data = person1;
    5. [data put];

    6.  

      三、BOOL

      在objc.h中,BOOL定義為:

       

      [cpp]
      1. typedef signed char BOOL;
      2. #define YES (BOOL)1
      3. #define NO (BOOL)0
        從上面的定義,我們可以發現布爾變量的值是YES和NO,或0和1.

         

        如:

         

        [cpp]
        1. BOOL enable=NO;
        2. enable=0;
        3. if(enable == YES) …
        4. if(enable) …
        5. if(!enable) …

           

          它類似於C語言中的TRUE和FALSH.


          四、SEL
          在Objective-c中,SEL是選擇器(selector)的一個類型。
          選擇器就是指向方法的一個指針。我們可以理解為程序運行到這裡時就會執行指定的方法。

          例如:

           

          [cpp]
          1. SEL sel=@selector (print);
          2. ClassA *classA = [[ClassA alloc]init];
          3. ClassB *classB = [[ClassB alloc]init];
          4. [classA performSelector:sel withObject:nil];
          5. [classB performSelector:sel withObject:nil];
          6.  
          7. SEL selA=@selector (print:);
          8. 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 */

            如:

             

            [cpp]
            1. ClassA *classA = [[ClassA alloc]init];
            2. classA = nil
            3.  
            4. id data;
            5. data=nil;

               

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved