簡體   English   中英

@class在Objective-C中做了什么?

[英]What does @class do in Objective-C?

任何人都可以解釋一下@class聲明在Objective-C中做了什么以及我們應該使用這個聲明的情況是什么?

這是一個前瞻性聲明。 它基本上告訴編譯器有一個類的名稱。 我在接口聲明中使用它:

@class Foo;
@interface Bar : NSObject {
    Foo *someFoo;
}
@end

當然你可以導入Foo的標題:

#import "Foo.h"
@interface Bar : NSObject {
    Foo *someFoo;
}
@end

但是如果someFoo沒有暴露給Bar用戶,他們會導入一個對他們沒用的額外頭文件。 使用@class聲明, Bar的用戶看不到額外的導入,因為Foo.h將被導入Bar的實現文件中。

它被稱為前瞻性聲明。

您使用此指令告訴編譯器存在指定名稱的objc類。 您的其他選項是包括接口,或使用id作為變量或類型。

這有助於最小化依賴性。 每當我能夠最小化依賴性時,我就會使用它們,並顯着減少構建時間。

它與c和c ++中的相同:

struct mon_struct;
namespace MON { class mon_class; }

希望這會有所幫助

上面的答案已經說明了幾乎所有的事情,我想在其上添加一些東西。

@class Foo是Foo類的前向聲明。 這就像告訴編譯器,foo類存在所以現在不要理會它。

注意: - 當兩個類彼此需要時,類聲明變得非常關鍵。 如果我們通常使用#import語句,那么我們將擁有無限循環的導入,編譯器不喜歡無限循環。 所以我們使用@class Classname

@class用於創建任何類的前向聲明。 如果您正在創建任何未知的實現類,那么您可以使用@class編譯器指令執行此操作。

您可以在知道實現時實現此類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM