1.类的概念

1.1多态:使不同的类能够共享相同的方法名,相同的名称,不同的类。Objective-C系统总是跟踪对象所属的类,运行时先判定对象所属的类,再确定需要调用的方法。
1.2 动态类型:程序直到执行时才能确定对象所属的类,id类型。
1.3  动态绑定:程序直到执行时才确定要对对象调用的实际方法。
1.4.  静态变量的优势
1.静态形态是因为它能更好地在程序编译阶段而不是运行时指出错误

2).提高程序可读性,程序应该具有自说明性。


2.变量与作用域

2.1.  类的初始化:常见的编程习惯是类中所有初始化方法都以init…开头。如果你的类包含多个初始化方法,其中一个应该是指定的初始化方法,其他所有初始化方法都应该使用这个方法。开始执行程序时,它向所有类发送initialize调用方法,如果存在一个类及相关子类,父类先得到这个消息,该消息向每个类只发送一次,并且在发送其他所哟消息之前发送该消息,这样做可以使程序开始时执行所有类的初始化工作,例如,可能想在开始时初始化与类有关的静态变量。

2.2.  作用域

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

@protected---该指令后面的实例变量可被该类及任何子类中定义的方法直接访问,是默认情况。

@private---变量可以被该类的方法直接访问,但不能被子类的方法访问。

@public---变量可被该类方法直接访问,也可被其他类或模块的方法直接访问。

@package---对于64位图像,可以在实现该类的图像的任何地方访问这个实例变量,这不是好的变成习惯,违背了封装的思想。

这些指令的作用范围是,指令处起始到右花括号,或者另外一个命令。

2)外部变量

按照惯例,用小写的g作为全局变量的首字母。

外部变量---可以被其他任何文件的任何方访问或改变。

外部全局变量,在所有类,方法之外定义,只定义一次,声明方法,不加extern,比如 int gFLag

 在其他文件访问时,必须先声明(可声明多次),extern int gFlag;

在一个文件中,只在开始进行一次extern声明将比较简便,在只有少数几个方法使用的时候,也可在各个

方法中声明。若在定义的同一个文件中的方法访问,不用声明。

3auto

自动局部变量,与static相反,是变量默认存储方式。静态变量有默认初始值0,而自动变量没有默认初始值,除非显示赋值,否则未知。

4const

制定的变量为只读,在程序运行期间有恒定的值。

5volatile

防止编译器优化掉看似多余的变量赋值。与const相反,明确告诉编译器,指定变量的值会改变

2.3.  枚举数据类型

枚举类型可以制定特定的值,后面的类型值递增1.

枚举标示符可以共享相同的值enum Boolean {no=0,false=0,yes=1,true=1}

给枚举类型变量赋值超过定义的范围,编译器不报错。

使用包含枚举数据类型的程序时,尽量不要一栏枚举值被当作整数这个事实,相反尽量把它们当作独立的

数据类型。

还可以这样定义枚举变量。

Enum{east,west,south,north} direction;

2.4  typedef

分三步,

1)像声明所需要类型的变量那样编写一天语句。Int n;

2)在通常应该出现声明的变量的地方,将其替换未新的类型。Int NUM

3);在语句的最前面加上关键字typedef

typedefint NUM;

NUM n= 100;

enum(east,west,south,north) direction;

enum(east,west,south,north) DIR;

typedefenum {east,west,south,north} DIR;

DIRdirection = east;

2.5 数据类型转换

1)如果其中一个操作数是longdouble,则另外一个操作数被转换为long double型,计算结果也是这种类型

2)如果其中一个操作数是double型,则了一个操作数转换为double型,计算结果也是这个类型

3)如果其中一个操作数是float型,则另一个操作数转换为float型,计算结果也是这个类型

4)如果其中一个操作数是_Bool,char,shortint,bit fiels或枚举数据类型,则全部转换为int

5)如果其中一个操作数是longlong int型,则另一个操作数转换为long long int计算结果也是这个类型

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

7)如果到达这一步,则可知两个操作数都是int型,计算结果也是这个类型。

2.6.  符号扩展只要将有符号的intshort int转换成更多字节的整型,在执行转换过程中给你符号位就会扩展至左侧,这就保证-5short int转换成long int之后,它的值依然是-5.intelarm上,字符是作为有符号的两处理的。。如果要强制对字符便利爱那个进程符号扩展,则可将这些变量声明未signed char型。4

3.分类和协议

3.1如果将分类放到一个主类定义文件中,那么这个类的所有用户豆浆访问这个分类中的方法。

3.2.分类可以访问原始类的实例变量,但不能添加变量(只能创建子类)。

3.3.分类可以重载一个方法,但是最好不要这样做,因为重载之后,原来的方法就不能使用了。(这种情况适合用子类)。

3.4.可以拥有许多分类,如果一个方法定义在多个分类中,该语句不会制定使用那个分类。

3.5.不必实现分类的所有方法。

3.6.通过分类添加新方法扩展类不仅会影响这个类,也会影响所有子类。

3.7.对象/分类命名对必须是唯一的,但是在给定的Objective-C名称空间中,只能存在一个NSString(私有的)分类。

4.协议


5.预处理

5.1.#运算符。

#definestr(x) # x

比如str(hello,”world”)—>”hello,\”world\””

参数中的任何双引号或反斜线符号都是预处理程序的保留字符。

5.2.##运算符

##用于把两个标记连在一起,创建单个标记.

#defineprintx(n) printf(“%i\n”,x ## n) 

printx(5)--àprintx(“%i\n”,x5);

09-06 02:17