[英]What does class_addProtocol actually do in 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.