zoukankan      html  css  js  c++  java
  • Objective-c 数据类型

    这里列出Objective-c中独有数据类型:


    一、字符串

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


    二、id类型
        id类型是Objective-c中一个比较独特类型。
        在概念上、类似Java中的Object类,可以转换为任何数据类型。
        换句话说,id类型的变量可以存放任何数据类型的对象。
        在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。

        我们可以理解为id类型就是void*类型。但是它们两个并非完全一样。下面是id在objc.h中的定义:

    1. typedef struct objc_object {  
    2. Class isa;  
    3. }*id;  


        从上面看出,id是指向struct objc_object的一个指针。也就是说,id是一个指向任何一个继承了Ojbect(或者NSObject)类的对象。需要注意的是id是一个指针,所以在使用id的时候不需要加星号,比如:      id n=nil;

    例如:

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


    三、BOOL

         在objc.h中,BOOL定义为:

    1. typedef signed char BOOL;  
    2. #define YES   (BOOL)1  
    3. #define NO    (BOOL)0  


         从上面的定义,我们可以发现布尔变量的值是YES和NO,或0和1.

         如:

    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)的一个类型。
        选择器就是指向方法的一个指针。我们可以理解为程序运行到这里时就会执行指定的方法。

        例如:

    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]]) {…}
       如果不想包含子类,就可以使用:

       nil与C语言的NULL相同。在objc/objc.h中定义如下:
       #define nil 0      /* id of Nil instance */
       
       Nil与nil有点不一样,Nil定义一个指向空的类(是Class,而不是对象)。具体定义如下:
       #define Nil 0      /* id of Nil class */

       如:

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





    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    ES6特性
    使用mybatis插件拦截SQL
    前端下载文件的几种方式
    Electron-vue项目使用 Inno Setup 创建安装包
    Windows powershell 常用代码段
    Java8之Predicate, Consumer,Function基础使用
    Java8之Predicate接口使用
    使用Replica Set副本集方式搭建mongodb副本集群
    Typora的一些偏好设置
    使用Typora编写md文档并优雅地上传到博客园
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4962958.html
Copyright © 2011-2022 走看看