Objective-C 类型的声明与实现
Objective-C 类型要求区分接口(interface)与实现(implementation)为两个程序区块,这是强制性的。
类型的接口通常放置于头文件内,依C语言的惯例以.h作为扩展名;类型的实现则放于以.m为扩展名。
Interface
接口区段里头清楚定义了类型的名称,实体变量(instance variable),以及方法。 以关键字@interface作为区段起头,@end退出区段。
1 | @interface MyObject : NSObject { |
方法前面的+/-号代表方法的类型:加号(+)
代表类型方法(class method),不需要实体就可以调用,近于C++的静态成员函数(static member function)。减号(-)
即是一般的实体方法(instance method)。 这里提供了一份意义相近的C++语法对照,如下:
1 | class MyObject : public NSObject { |
Objective-C定义一个新的方法时,名称内的冒号(:)代表参数传递,不同于C语言以数学函数的括号来传递参数。Objective-C方法的参数也不必全部都附缀于方法名称的尾端,也可以夹杂于名称中间,提高程序可读性。以一个设置颜色RGB值的方法为例:
1 | - (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue; /* 声明方法 */ |
这个方法的全名是setColorToRed:Green:Blue:。每个冒号后面都带着一个形态为float的参数,分别代表红,绿,蓝三色。
Implementation
实现区段则撰写方法实际运行的程序。以关键字@implementation作为区段起头,@end结尾。
1 | @implementation MyObject { |
值得一提的是不只interface区段开头可以声明实体变量,implementation区段开头也可以声明实体变量,两者的差别在于成员访问权限, 声明于interface区段内的实体变量默认权限为protected,声明于implementation区段的实体变量则默认为private,基 于面向对象的封装原则,仅供类型内部使用的变量请尽可能声明于implementation区段(.m档)内,不需要曝露于interface(.h档) 中。