Objective-C 2.0数据类型

本文有删节: 

整形数据(int)

Objective-C中的int型可以存储正的或者负的整数(即没有小数位),整形(int)的位数依赖于目标机,在编译期决定,一般是32位或者64位,这个取决于程序运行平台的CPU。值得注意的是,有时候操作系统也会起到作用,比如,CPU是64位,但是跑的操作系统是32位的,那么int只能是32位的。

在32位系统上,无符号的整形(unsigned int)的范围是0到4294967295。在64位系统上,这个范围是0到18,446,744,073,709,551,615。对于有符号的整形,这两个范围分别为−2,147,483,648到+2,147,483,647和−9,223,372,036,854,775,808到+9,223,372,036,854,775,807。

所以,在写Objective-C的程序的时候,你唯一可以假设的是,int型至少是32位。

译者注:在iOS上,int是32位的。

缺省的情况下,int是使用十进制的数来进行赋值的,如果你想使用八进制进行赋值,请在数据前面加入一个0。如下所示:

int myoctal = 024;

同样的,0x开头的标识16进制:

int myhex = 0xFFA2;

字符型(char)

Objective-C的char类型是用来保存单个字符的,类似于英文字母,十进制的数字或者标点符合。下面是这样的例子:

char myChar = 'w';
char myChar = '2';
char myChar = ':';

转义字符 

除了上面这些普通的字符,有时候我们需要一些特殊的字符来标识特殊的含义,比如回车换行,tab等,这些特殊的字符是以反斜杠'\'开头的,比如下面的这个就是标识回车换行:

char newline = '\n';

任何以反斜杠'\'开头的都是转义字符,那么我们如何在字符串中标识反斜杠那?答案是两个反斜杠,如下所示:

char myslash = '\\'; Assign a backslash to a variable

下面是常用的转义字符的列表:

\a - Sound alert
\b - Backspace
\f - Form feed
\n - New line
\r - Carriage return
\t - Horizontal tab
\v - Vertical tab
\\ - Backslash
\" - Double quote (used when placing a double quote into a string declaration)
\' - Single quote (used when placing a double quote into a string declaration)

浮点类型(float)

float在Objective-C中标识浮点类型的数据,即有小数部分的数据,例如456.12。一般情况下,这样的数据被编译程序识别为另一种类型(Double,双浮点类型),所以在赋值给float类型的时候,在数据后面加上一个f即可,就像下面这个样子:

float myfloat = 123.432f

当我们表示一个很大的浮点数的时候,我们可以使用科学计数法,即后边跟一个eX,X标识一个数字,比如67.7 x 104可以表示成下面的样式: 

float myfloat = 67.7e4

双精度浮点类型(double)

Objective-C中的double 数据类型用来存储比float类型更大的数据,double这个词来自于它用来存储的bit大小是float的两倍,就像上一节提到的那样,浮点数据是一个double类型,除非它跟一个f来标识是一个float类型。

id类型

你会在本书后面的章节看到,Objective-C是一个面向对象的语言,面向对象语言是用类的对象来重用代码的,调用对象的方法被来实现逻辑功能,这些方法需要传入参数和返回一些值,这些类型可能也是一个对象,id就是一个通用的用来指向一个对象。

译者注:

在Objective-C中对象的标识符是一个单独的数据类型:id。这种类型是一种通用的类型可以是各种对象不管是什么类,可以是一个类的实例也可以是类对象本身。

1
id anObject;

对于Objective-C的面向对象结构,例如方法的返回值id代替int作为默认的返回值类型。(对于严格的C语言结构方法返回值的默认类型仍然是int)。

关键字nil被定义为空对象一个值为0的id。Id,nil和其他Objective-C基础类型都是在头文件objc/objc.h中定义的。

id被定义为一个对象数据结构的指针:

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

每一个对象都有一个isa变量来表示它是哪个类的实例。由于类这个类型本身被定义为一个指针,因此isa变量经常被称为“isa 指针”。

1
typedef struct objc_class *Class;

布尔类型(BOOL)

就像其他语言一样,Objective-C也有一个用来保存true和false的数据类型,布尔类型,这个类型使用关键词_Bool或BOO来表示 ,下面的表示法都是合法的:

_Bool flag = 0;
BOOL secondflag = 1;

译者注:和C++里面的bool不一样,BOOL只是一个signed char,YES=1,NO=0,只是一个约束,实际上你可以付给BOOL,YES和NO以外的值,在使用其他的数赋给一个布尔类型的时候,只取低八位,那么就造成下面的问题,0x2300赋给一个布尔类型的时候,布尔类型的值是NO。大家一定要注意这个。

Objective-C中数据类型修饰符

目前位置,我们看到的都是Objective-C中的基本数据类型。在上面的数据类型的基础上,Objective-C还有一些修饰符来对这些数据类型进行扩张。.

long型

long用来扩展一个数据类型的数据范围,比如,下面的调用就是扩张了int型的数据:

long int mylargeint;

数据范围被扩张到何种程度是由系统决定的,所以在很多系统上,long int和int其实一样的。long同样可以用来修饰double型:

long double mydouble;

译者注:long可以在iOS中单独使用,相当于long int,但是它的大小还是32位的,如果你希望使用64位的数据,请使用long long。


long long型

你可以认为long long是一个更长的long,因此,程序中的long long总是64位的,long long只用来修饰int, long long int和long long相同。

long long int mylargeint;

short型

目前我们看到的都是增加存储空间的修饰符,那么相反的也有减少存储空间的修饰符,short,它只修饰int,short int是一个16位的整形,范围从−32,768到+32,767:

short int myshort;

有符号和无符号signed / unsigned

缺省的,一个整形是有符号的。换句话说,即编译器会认为一个整形变量会存储正数,也可能存的是负数。这样就限制了正负数的范围,比如,32位的整形的最大值在无符号的时候可以达到4,294,967,295。但是实际中,由于有负数的存在,所以它的范围就是−2,147,483,648到+2,147,483,647。如果我们知道一个整形从来不会被用来存储负数,那么我们可以声明它为无符号的,就是用unsigned修饰,它的范围就是0到+4,294,967,295。声明方式如下:

unsigned int myint;

上面的修饰符可以组合使用,比如声明一个无符合的短整形:

unsigned short int myint = 10;

注意在unsigned, signed, short和long 修饰整形的时候,关键词int可以省略,下面就是这样的例子:

short myint;
long myint;
unsigned myint;
signed myint;

小结

Objective-C在基本数据类型方面,是和其他语言一样的。

译者注:Objective-C是标准C的扩展,所以基本类型和C语言差不多,不过要注意布尔型,这个类型的定义是在C形成标准以前,所以就形成了现在的这个样子。

阅读更多
个人分类: Objective-C
上一篇在Linux上安装和编译GNUstep
下一篇iOS5编程--官方例子代码研究--5.TableMultiSelect
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭