这次,我们介绍Objective-C是如何定义一个完整的类。定义一个类都包括哪些部分,为了简单明了,更加直接,列举了一个20多行代码的小例子。
那么,让我们先看下面这个简单的例子:
1
2
3
4
5
6
7
8
9
10
11
|
#import <Foundation/Foundation.h> //引用Foundation库头文件
@interface
Fraction:
NSObject
{
int
numerator;
//声明numerator参数
int
denominator;
//声明denominator参数
}
-(
void
) print;
//声明打印方法
-(
void
) setNumerator:(
int
) n;
//声明设置numerator参数的带1个参数的方法
-(
void
) setDenominator:(
int
) d;
//声明设置denominator参数的带1个参数的方法
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@implementation
Fraction
-(
void
) print
//定义打印方法
{
NSLog
(@
"%i/%i"
, numerator, denominator);
}
-(
void
) setNumerator: (
int
) n
//定义带参数的setNumerator方法
{
numerator = n;
}
-(
void
)setDenominator: (
int
) d
//定义带参数的setDenominator方法
{
denominator = d;
}
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
int
main(
int
argc,
char
*argv[])
{
NSAutoreleasePool
*pool = [[
NSAutoreleasePool
alloc] init];
Fraction *myFraction;
myFraction = [Fraction alloc];
//为myFraction对象分配内存空间
myFraction = [Fraction init];
//初始化myFraction对象
[myFraction setNumerator:1];
//调用myFraction对象中的setNumerator方法
[myFraction setDenominator:3];
//调用myFraction对象中的setDenominator方法
[myFraction print];
//打印myFraction对象参数
[myFraction release];
//释放myFraction对象资源
[pool drain];
return
0;
}
|
上述程序运行的结果是:
The value of myFraction is:
1/3
从上述代码可以看到,程序在逻辑上分为3个部分:
-
@interface部分
-
@implementation部分
-
program部分
@interface部分用于描述类、类的数据成分以及类的方法;而@implementation部分包括实现这些方法的实际代码。最后,program部分包含实现程序预期目的的程序代码。
下面展开来讨论:
-
@interface部分
定义新类时,必须做一些事情。首先,要通知Objective-C编译器这个类来自何处。就是说,必须命名它的父类。其次,必须确定这个类对象要存储的数据的类型。就是说,必须描述类成员将包含的数据。我们把这些成员叫做实例变量。最后,还必须定义在处理该类的对象时将要用到的各种操作或方法的类型。这些工作都在程序中名为@interface的特殊部分内完成。该部分的一般格式类似于:
1
2
3
4
5
6
|
@interface
NewClassName:ParentClassName
{
memberDeclarations;
}
methodDeclarations;
@end
|
-
@implementation部分
@implementation部分包含声明在@interface部分的方法的实际代码。就像术语指出的那样,在@interface部分声明方法并在@implementation部分定义它们(就是说给出实际的代码)。
@implementation部分的一般格式如下:
1
2
3
|
@implementation
NewClassName
methodDefinitions;
@end
|
NewClassName表示的名称与@interface部分的类名相同。可以在父类的名称之后使用冒号,如同在@interface部分使用的冒号一样:
@implementation Fraction:NSObject
然而,它是可选的而且通常并不这么做。
@implementation部分中的methodDefinitions部分包含在@interface部分指定的每个方法的代码。与@interface部分类似,每种方法的定义首先指定方法(类或实例)类型、返回类型、参数及其类型。然而,我们并没有使用分号来结束该行,而是将之后的方法代码放入一对花括号中。
-
Program部分
program部分包含解决特定问题的代码,如果有必要,它可以跨越多个文件。在这些文件中,必须在其中一个地方有一个名为main的例程。通常情况下,这是程序开始执行的地方。