一般来说,eg:当在classA.h文件中需要声明一个classB的指针时,为了能够让编译器知道classB是个什么类型的东西,有2中方式可以实现:
1.通过#import "classB.h"
缺点 :因为头文件之间的依赖关系,可能会造成很多文件被重新编译过,从而降低了效率。2.通过@class classB 仅仅是告诉编译器classB是一个类而已。
eg:
Car.h中:
#import <Cocoa/Cocoa.h>
@class Tire
@class Engine
@interface Car:NSObject
{
Tire* tires[4]; //4个轮子
Engine* engine; //一个引擎
}
- (void)setEngine:(Engine*)newEngine;
- (Engine*)engine;
- (void)setTire:(Tire*)tire atIndex:(int)index;
- (Tire*) tireAt:(int)index;
- (void) print;
@end
而 在Car.m文件中由于要用到Tire和Engine类中的实例变量等具体信息,因此需要在Car.m中import进Tire.h和Engine.h来。
#import "Car.h"
#import "Tire.h"
#import "Engine.h"
@implementation Car
- (void)setEngine:(Engine*)newEngine
{
[newEngine retain]; //保留引用
[engine release];
engine = newEngine;}
- (Engine*)engine
{
return (engine);
}
- (void)setTire:(Tire*)tire atIndex:(int)index
{
if(index<0 || index>3){
NSLog(@"Error: out of index!!!");
exit(1);
}else{
tires[index] = tire;
}
}
- (Tire*) tireAt:(int) index
{
if(index<0 || index>3){
NSLog(@"Error: out of index!!!");
exit(1);
}else{
return tires[index];
}
}
- (void) print
{
.....
}
-(void)dealloc
{
[engine relase];
}
@end