到现在为止,已经学习了如何调用类方法以及创建对象。 到目前为止我们还没有看到如何才能定义一个类, 上两次的内容已经多次涉及到类及类的成员,现在我们可以学习一下如何才能定义一个自己的类。
一般来讲创建一个类需要两部分,首先是申明类的头文件ClassName.h, 还有类实现的源文件ClassName.m, 如果你想在程序中混合C/C++编程那么就需要使用.mm或者.M ,这样编译器会以此判断该类中混合了Objective-C 和 C语言。 ClassName.h 头文件中定义类的成员变量以及公有成员函数, 源文件中则包含实际的实现代码,如果你想定义私有函数可以放在实现源文件中,不过需要注意的是必须在该函数被调用调用之前。下面用一个具体的例子来学习如何定义自己的类
1 2 3 4 5 6 7 | #import <Cocoa/Cocoa.h> @interface Friend : NSObject { NSString* name; int age; } @end |
我们从NSObject类继承一个新的类Friend,#import导入Cocoa库的Cocoa.h 头文件, @interface 表示申明一个类定义,也是类定义的开始, 在花括号内是两个成员变量, 最后@end表示类定义结束。对于成员变量可以使用Assessors访问器来访问,也可以申明方法来存取变量
1 2 3 4 5 6 7 8 9 10 11 12 | #import <Cocoa/Cocoa.h> @interface Friend : NSObject { NSString* name; int age; } -(NSString*) getName; -(int) getAge; -(void) setName:(NSString*) newName; -(void) setAge:(int) newAge; @end; |
可以定义存取的方法,如 setName 和 getName。 再来看看实现文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #import <Cocoa/Cocoa.h> @implement Friend -(NSString*) getName { return name; } -(int) getAge { return age; } -(void) setName:(NSString*) newName { name = newName; } -(void) setAge:(int) newAge { age = newAge; } -(id) init { if( (self=[super init]) ) { [self setName:@"Mike"]; [self setAge:22]; } return self; } -(void) dealloc { [name release]; [super dealloc]; } @end; |
除了要实现定义的成员函数, 还需要重新实现初始化以及析构函数init 和 dealloc, init中的第一行显示由父类来创建一个类对象付给self, 如果成功则给成员变量赋初值, 然后返回self。 在析构释放内存空间时,先把子类中的所有需要释放的对象都release, 然后发送release消息给父类释放内存。
怎么样,定义新类是不是很简单呢? 这里需要注意的几个问题:
待续。。。
相关文章