变量和数据类型
(参考书Objective-C 2.0 程序设计)
使用枚举数据类型,可以定义只存储一系列特定值的数据类型名称。Objective-C语言的typedef语句允许你对内置或派生的数据类型指派自己的名称
一、类的初始化
1、初始化模式:Fraction *MyFraction=[[Fraction alloc]init]
设置值:[MyFraction setTo:1 over: 3]
初始化对象之后为其设置初值的过程可合并到一个方法中。
2、Fountation框架中的NSArray类中包含的几种初始化方法:
initWithArray:
initWithArray: copyItems:
initWithContentsOfFile:
initWithContensOfURL:
initWithObjects: count:
示例语句:
MyArray=[[NSArray alloc]initWithArray:myOtherArray];
注:如果你的类包含多个初始化方法,其中一个就应该是指定的初始化方法,并且其他 所有初始化方法都就使用这个方法
二、作用域
1、控制实例变量的作用域的指令
@protected——这个指令后面的实例变量可被该类及任何子类中定义的方法直接 访问。这是默认情况。
@private——这个指令后面的实例变量可被定义在该类的方法直接访问,但是不能 被子类中定义的方法直接访问
@public——这个指令后面的实例变量可被定义在该类的方法直接访问,也可被其 它类或模块中定义的方法直接访问。
@package——对于64位图像,可以在实现该类的任何地方访问这个变量。
注:@public指令使得其它方法或函数可以通过使用指针运算符(->)访问实例变量。
2、外部变量
1>概念:在程序的开始处(所有方法,类定义和函数定义之外)定义的变量为全 局变量,也是外部全局变量。
2>声明方式,如:extern int gMoveNumbex;
3>使用原则:变量必须定义在源文件中的某个位置,这是通过在所有方法和函数 外部声明变量,并且前面不加关键字extern 。
3、静态变量:它们的值经过不同的方法调用时是共享的。
1>声明方式,如:static int num;
注:静态变量是有默认值为0,普通变量则没有。
三、存储类说明符
1、auto(自动):用来声明一个自动变量。
自动为变量分配存储空间,并在退出时自动解除分配。
注:变量声明时如果前面未加说明符则默认为auto类型。
即 int index; 等效于auto int index;
2、const(不变的):程序运行时变量的值不发生改变。
定义方式:const double pi=3.14;
3、volatile(易变的):程序运行时变量的值会发生改变。
声明方式:volatile char *outport;
作用:防止编译器优化掉看似多余的变量赋值,同时避免重复检查值没有变化 的变量。
四、枚举数据类型
1、概念:只存储一系列特定值的数据类型。
2、定义方式:使用enum开头
如:enum flag{false,true};
变量声明:前面仍需enum
如:enum flag endOfData,matchFound;
注:从理论上来说,在程序运行中这个数据类型只能指派true和flase两种值,不 能指派其它值。但事实并非如此,即使违背了这个规则,编译器也不会摄氏。
3、枚举数据类型标识符对应的整数值
在定义数据类型时给该标识符指定整数值。如果未指定值,首位默认值为0,后面由前一个enum的值递增1得到。
注:尽量不要依赖枚举值被当作整数这个实事,相反,尽量将它们当作独立的数据 类型。
五、typedef语句
1、作用:编程者可以为数据类型另外指派一个名称。
2、声明语句,如:typedef int Counter;
3、使用typedef定义一个新类型名,一般步骤:
1>像声明需类型的变量那样编写一条语句。
2>在通常应该出现声明的变量名的地方,将其替换为新的类型名。
3>在语句前面加上关键字typedef。
六、数据类型转换
1、数据转换类型可分为:“隐式转换”和“显式转换(强制转换)
2、隐式转换规则:
编译器总是是将类型由低级向高级进行转换,将低级的转换至当前表达式中的最高级类型,且计算结果也为此类型。关系如下
Long double <—double <—float<—long long int<—long int <—int <—short int、char、_Boolt、bit field
3、显示转换的使用方法:在要转换的变量前面加上要转换类型名用小括号括起来。
如:f*i+(float)1/s
4、符号扩展
只要将有符号的int或short int 转换成更多字节的整型,在执行转换的过程中符号位就会扩展至左侧。
注:如果要强制对字符变量进行符号扩展,则可将这些变量声明为signed char型。