现在的位置: 首页 > 综合 > 正文

IOS第四天——Obj-C的数据类型和表达式

2018年05月18日 ⁄ 综合 ⁄ 共 2791字 ⁄ 字号 评论关闭

那么其实很多朋友可能会纳闷儿,你不是要学IOS开发么?那么直接去学就好了,抄呗,拖拖控件,写几行代码就好了啊,好吧,其实这个也算是个捷径,但很多时候要想做好,还是说,基础要打牢,所以,废话不多讲,开始今天的学习。

今天我们主要来看下Obj-C的数据类型和表达式
一、  数据类型
Obj-C是C语言的超集,之前我们都知道了,所以Obj-C中的数据类型分为两种:一种是基于C语言的基本数据类型;另一种是Obj-C特殊的数据类型。
1.  C语言基本数据类型
Obj-C基于C语言的基本数据类型有:int,float,double和char,那么我们来看下书上的一个比较全面的例子,包括各个类型的赋值和输出。

#import <Foundation/Foundation.h>
int main (int argc,char *argv[])
{
NSAutoreleasePool * pool=[[NSAutorreleasePool alloc] init];    //声明对象释放池
int integerVar=100;                           //声明int变量
float floatingVar=331.79;                                      //声明float变量
double doubleVar=8.44e+11;                    //声明double变量
char charVar='W';                        //声明char变量
NSLog (@"integerVar=%i",integerVar);                //使用NSLog函数输出
NSLog (@"floatingVar=%f",floatingVar);                //使用NSLog函数输出
NSLog (@"doubleVar=%e",doubleVar);                //使用NSLog函数输出
NSLog (@"doubleVar=%g",doubleVar);                //使用NSLog函数输出
NSLog (@"charVar=%c",charVar);                    //使用NSLog函数输出
[pool drain];                            //释放对象释放池
return 0;
}

那么上面这个例子的最终输出结果为:

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是一个指针(这个地方原谅我照本宣科吧,没学过C语言的孩纸桑不起啊)并且指向一个类结构提,定义如下所示:
    Typedef struct objc_object{
    Class isa;
    }*id;
    那么我们可以把id当成C语言的void*来理解,可以用它来映射任何对象类型,并且可以给它传任何消息,如果传递给它的消息它不支持的话,就会返回异常。我们还是参照书上的一个例子来看下id的用法:
   

    id object;        //声明一个id类型的对象
    object=[[Car alloc] init];//实例化一个Car的对象并且传递给object,此时object是Car的对象
    [object run];        //调用Car的run方法
    object=[[Bike alloc] init]; //实例化一个Bike对象并传递给object,此时object是Bike的对象
    [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

    那么我们还是看一个实例:
   

    BOOL isFinished=NO;//声明一个BOOL变量并赋初始值为假
    if(isFinished)       //如果为真就执行括号中的语句
    {
    }

    isFinished=YES;       //将isFinished变量赋值为真
    if(isFinished)       //此时isFinished为真,执行下面括号里的语句
    {
    }

    (3)nil代表一个空对象,相当于我们其他语言里的NULL,在Obj-C中nil表示一个Objective-C对象的指针指向空,我们看一个实例:
   

    Car * myCar=nil;//声明一个Car的变量并且赋值为空,此时myCar相当于空对象
    if(myCar)    //判断myCar对象是否为空,如果为空就执行startEngine方法
    {
        [myCar startEngine];
    }

    那么如果我们直接去掉if判断条件,在Obj-C中是不会做任何操作的,因为Obj-C中如果一个空对象调用任何方法,都是不会做任何操作的,但是像其他的语言中,比如C\C++\Java\C#等,这样儿做是会报错的。
    (4)SEL是selector的一个类型,,代表一个方法,等同于C语言中的函数指针,下面的这个例子说明SEL是如何使用的。
   

    SEL oneMethod=@selector(render);//声明一个SEL变量,并且赋值为方法render的指针
    [oneObject performSelector: oneMethod];//假设oneObject已经实例化,执行render方法

    @select关键字是Obj-C语言中专属的关键字,作用就是得到一个方法指针。上面的例子中传入名字为render的方法,使得oneMethod成为指向render方法的指针。oneObject假设是已经实例化的对象,通过调用performSelector方法来执行render方法,那么这里的performSelector方法是NSObject类中实现的方法,因为每个Obj-C类都是继承自NSObject类,所以所有实例化之后的对象都可以调用此方法。
二、  运算表达式
Obj-C中基本的运算表达式和其他的语言没有什么太大的差别,加减乘除以及取余等,基本的规则也一样,先左后右,高级运算符优先于低级运算符,这里就不再一一赘述了。

OK,今天就先学到这里,其实还是那句话,有过编程经验的话,再学习一门新的语言并不是什么难事儿,我个人感觉到目前为止,Obj-C中让我不太理解的就是BOOL类型、YES和NO,这点儿我会再仔细去查阅相关的资料看一下,或者请教一下身边的IOS开发者。
2013年04月16日,Eric.Tang 记

抱歉!评论已关闭.