Objective-c 数据类型

浏览:
字体:
发布时间:2013-12-23 12:22:29
来源:

这里列出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;

               

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2023 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();