@class和#import相似。
1.@class用于 forward-class declaration,只能使用@class,
@class class2 @interface class1 { class2* class2Object; } @end @interface class2 { class1* class1Object; } @end
2.
class1.h中引入class2.h头文件
#import "class2.h" @interface class1 { class2* class2Object; } @end
class2.h中引入class1.h头文件
#import "class1.h" @interface class2 { class1* class1Object; } @end
这种情况会导致引用死锁,所以应该用forward-class declaration,即@class,如下
class1.h
@class class2; @interface class1 { class2* class2Object; } @end
class2.h
@class class1; @interface class2 { class1* class1Object; } @end
总结,@class class1只是告诉编译器,class1是一个类,你不要以为class1是个未声明的野种,除此之外,没了。
但是 #import "class1.h"会告诉编译器,class1这个类中有什么东西,即class1.h中包含的函数和变量。
所以.h中使用@class绰绰有余,若你有需要创建或访问class1中的函数和变量,则必须使用#import。
最后给个常见的例子
@class A; @protocol MyDelegate <NSObject> - (BOOL)f:(A *)a; - (void)g:(A *)a; @end @interface A : NSObject @end
协议写在@interface前面,协议使用了类A,又不涉及A中的函数和变量,此时应当在协议前面写上@class A;,否则是会出错的。