Objective-C数据类型

来源:互联网 发布:交易员训练软件 编辑:程序博客网 时间:2024/06/06 13:29
一、  数据类型
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类,所以所有实例化之后的对象都可以调用此方法。
0 0
原创粉丝点击