Objective-C中的类声明以@interface开始,并以@end为结束符。好的编码习惯会在类声明结束时注释说明类。
@interface ClassName : BaseClass //或是SuperClass?Objective-C中的基础类是NSObject,应该与其他OO语言一样,实现了基本的创建销毁
{
VarType ClassMemberName1;
VarType ClassMemberName2;
}
- (ReturnType) ClassMethod: (VarType) ParamateName;
@end //注释
Objective-C中的方法声明如下:
- (方法返回类型) 方法名称:(参数类型)参数名称;
Objective-C中有一种名为中缀符(infix notaion)的语法技术。方法的名称及其参数都是合在一起的。例如,你可以这样调用一个参数的方法:
[circle setFillColor: kRedColor];
带两个参数的方法调用如下所示:
[textThing setStringValue: @"hello there" color: kBlueColor]; //以上代码出自原书,无上下文,变参命名不规范,是我肯定不这么干(14日学习新篇章发现这么写是对的,set前缀的是setter方法的,而后两个是参数
setStringValue:和color:实际上是参数的名称(实际上是方法名称的一部分)。
Objective-C中使用@implementation来声明类实现的开始,后面跟着实现的类名,同样以@end来声明类实现的结束,当然你愿意的话也请在背后加上类的注释,起码标上类名。
Objectvie-C的类实现部份中可以单独实现方法而不用在接口声明,但它同样不是私有的,Objective-C中不存在真正的私有方法。这是Objective-C动态本质的副作用。
以下简单示范:
@implementation
- (ReturnType) ClassMethodName1: (VarType) ParamateAlias
{
//use Paramate todo something
}
@end
为毛是ParamateAlias?原因是我们已经通过类定义了一个名为ParamateName的实例变量,可以在该方法中引用该变量-它在作用域范围中。因此,如果使用相同的名称定义另一个 ,编译器将会阻止我们访问该实例变量。使用相同的变量名会隐藏初始变量,可以为参数使用新的名称来避免该问题。
书中在这一章提到了OO大湿Bertrand Meyer的开放|关闭原则(Open/Closed Principle),即软件实体应该对扩展开放,而对修改关闭。