@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;,否則是會出錯的。