深入理解Objective-c中@class的含义
在Objective-c中,当一个类需要引用另一个类,即建立复合关系的时候,需要在类的头文件中建立被引用类的指针。 如:
Car.h
1
2
3
4
5
6
7
8
9
#import?
?
@interface Car:NSObject
{
? ? Tire *tires[4];
? ? Engine *engine;
}
?
...
实现类我们先省略,如果你直接这么编译,编译器会报错,告诉你它不知道Tire和Engine是什么。
这时候有两个选择,一个是import这两个被引用类的头文件,另一个是使用@class声明Tire和Engine是类名。 二者的区别在于:
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.
如:
a.h
1
2
3
4
@class Rectangle;
@interface A : NSObject {
...
}
a.m
1
2
3
#import Rectangle
@implementation A
...