详解Objective-C中变量和数据类型

Objective-C变量数据类型是本文要介绍的内容,很详细的从类的初始化、作用域回顾(变量的一些内容)、数据类型的汇总等来讲述内容,本文认为本文非常适合初学者来参考,我们先来看详细内容详解。

一、类的初始化

编写初始化时,遵循两个策略:如果你的类包含多个初始化方法,其中一个就应该是指定的(desigrated)初始化方法,并且其他所有初始化方法都应该使用这个方法。通常,它是最复杂的初始化方法(一般是参数最多的初始化方法)。通过创建指定的初始化方法,可以把大部分初始化代码集中到单个方法中。然后,任何人要想从该类派生子类,就可以重载这个指定的初始化方法,以便保证正确地初始化新实例。

二、作用域回顾

1、控制实例变量作用域的指令

在接口部分声明实例变量时,可以指一下三个指令放在实例变量之前,以便更精确地控制类作用域

(1)protected——这个指令后面的实例变量可被该类及任何子类中定义的方法直接访问。默认。

(2)private——这个指令后面的实例变量可被定义在该类的方法直接访问,但是不能被子类中定义的方法直接访问。

(3)public——这个指令后面的实例变量可被该类中定义的方法直接访问,也可被其他类或模块中定义的方法直接访问。

(4)package——对于64位图像,可以在实现该类的图像的任何地方访问这个实例变量。

如:

@interface Printer:NSObject  


          {  


               @private  


                    int pageCount;  


                    int tonerlevel;       //任何从Printer派生子类的人都无法访问它  


               @protected  


                    //other instance variables     //可被子类访问,可被Printer类访问  


          }  


          ……  


          @end 

@public指令使得其他方法或函数可以通过使用指针运算符(->)访问实例变量。

2、外部变量

如果在程序的开始处(所以方法、类定义和函数定义之外)编写的变量语句,那么这个模块中的任何位置都可以引用这个变量的值。——全局变量:惯例,用小写g作为全局变量首字母;外部变量。如:int fMoveNumber;

外部变量是可被其他任何方法或函数访问和更改其值的变量,在需要访问外部变量模块中,变量声明和普通方式一样,只需加上extern。要告知系统访问其他文件中定义的全局变量。如:extern int gMoveNumber;

3、静态变量

除了特定类中的方法,再没有其他方法需要访问这个特定变量。可以在包含这个特定类的实现的文件中将该变量定义为static。如:static int gGlobalVar = 0;

三、存储类说明符

1、auto

声明一个自动局部变量。函数或方法内部变量的默认声明方式。如:auto int index;——int index;

静态变量有默认初始值0,自动变量没有。

2、const

对程序中值不变的变量设置const特性,不可更改其值,必须初始化。如:const double pi = 3.141592654;

3、volatile

指定类型变量的值会改变(与const相反)。为了防止编译器优化掉看似多余的变量赋值,同时避免重复地检查值没有变化的变量。如:

volatile char *outPort;      



*outPort = '0';     




*outPort = 'N'; 

防止第一个赋值语句从程序中删除。

四、枚举数据类型(enum)

将一系列值指派给一个变量。

enum  枚举数据类型的名称  标识符序列(包含在一对花括号内)

如:

enum flag{false,true};  


enum flag endOfData,matchFound; 

可指派true、false给这两个变量

如果希望一个枚举标识符对应一个特定的整数值,那么可以在定义数据类型时给该标识符指定整数值。在列表中一次出现的枚举标识符被指派了以特定整数值开始的序列数。

如:

enum direction{up,down,left=10,right};  



up=0,down=1,left=10,right=11 

枚举标识符可以共享相同的值。如:

enum boolean{no=0,false=0,yes=1,true=1}; 

可以明确地给枚举类型的变量指派一个整数值,使用类型转换运算符。如:

lastMonth=(enum month)(monthValue=-1); 

将枚举当做独立的数据类型。

定义枚举数据类型时,可以省略数据类型名称,可以将变量声明作为特定枚举数据类型中的一个。如:enum {east,west,south,north} direction;

定义枚举数据类型时,必须确保枚举标识符与定义在相同作用域内的变量名和其他标识符不同。

五、typedef语句

为数据类型另外指派一个名称。如:typedef int Counter;——int=Counter

六、数据类型转换

1、转换规则

(1)一个操作数是long double型,则另一个操作数被转换为long double型,计算结果也是。

(2)一个操作数是double型,则另一个操作数被转换为double型,计算结果也是。

(3)一个操作数是float型,则另一个操作数被转换为float型,计算结果也是。

(4)一个操作数是_Bool、char、short int、bit field或枚举数据类型,则全部转为int型。

(5)一个操作数是long long int型,则另一操作数转化为long long int型,计算结果也是这种类型。

(6)一个操作数是long int型,则另一操作数转换为long int型,计算结果也是这种类型。

(7)均为int型,计算结果也是。

2、符号扩展

只要将有符号int或short int转换成更多字节的整数,在执行转换的过程中符号位就会扩展至左侧。

相关推荐