Objective-c 数据类型

114 篇文章 0 订阅
88 篇文章 0 订阅

     

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值