设计一个类的Interface
就Objective-C语言而言,创建一个类非常简单。它非常典型的分成了两个部分。
类的接口通常保存在ClassName.h文件里,它定义了实例的参数,以及一些公开的方法。
类的实现在ClassName.m文件里。它包含了真正运行的代码和那些方法。它还经常定义一些私有的方法。这些私有的方法对于子类是不可见的。
这里有一个接口文件的大概。类名Photo,所以文件名叫Photo.h:
- #import
- @interface Photo : NSObject {
- NSString* caption;
- NSString* photographer;
- }
- @end
首先,我们把Cocoa.h import进来。Cocoa的应用程序的所有的基本的类大多都是这样做的。#import宏指令会自动的避免把同一个文件包含多次。
@interface符号表明这是Photo类的声明。冒号指定了父类。上面这个例子父类就是NSObject。
在大括弧里面,有两个变量:caption和photographer。两个都是NSString类型的。当然了,他们也可以是任何别的类型包括id类型的。
最后@end结束整个声明。
增加方法
让我们为成员变量加一些getters:
- #import
- @interface Photo : NSObject {
- NSString* caption;
- NSString* photographer;
- }
- - caption;
- - photographer;
- @end
别忘记,Objective-C方法不需要加get前缀。一个单独小横杆表明它是一个实例的方法。假如是一个加号的话,那就说明它是一个类的方法。
编译器默认的方法的返回类型为id。还有所有的方法的参数的默认类型也都是id类型的。所以上面的代码从技术上讲是对的。但是很少这么用。我们还是给它加上返回类型吧:
- #import
- @interface Photo : NSObject {
- NSString* caption;
- NSString* photographer;
- }
- - (NSString*) caption;
- - (NSString*) photographer;
- @end
下面我们再加上setters:
- #import
- @interface Photo : NSObject {
- NSString* caption;
- NSString* photographer;
- }
- - (NSString*) caption;
- - (NSString*) photographer;
- - (void) setCaption: (NSString*)input;
- - (void) setPhotographer: (NSString*)input;
- @end
Setters不需要返回任何值,所以我们把它的类型指定为void.