iOS #import和@class 區別


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM