Может кто-нибудь объяснить мне, что делает объявление @class в объективном и какие случаи, в которых мы должны использовать это объявление.
Что делает @class в Objective-C?
Ответ 1
Своя декларация. По сути, он говорит компилятору, что theres класс этого имени. Я использую его в объявлениях интерфейса:
@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
.
Ответ 2
он называется объявлением вперед.
вы используете эту директиву, чтобы сообщить компилятору, что существует класс objc с указанным именем. ваши другие параметры включают в себя интерфейс или использование идентификатора для переменных или типов.
это полезно для минимизации зависимостей. я использую их, когда могу, чтобы минимизировать зависимости и значительно сократить время сборки.
это то же самое, что и в c и С++:
struct mon_struct;
namespace MON { class mon_class; }
Ответ 3
надеюсь, что это поможет немного больше
В ответе уже сказано почти все, я хотел бы добавить что-то на нем.
@class Foo
является прямым объявлением класса Foo. Это похоже на компилятор, класс foo существует. Не беспокойтесь об этом прямо сейчас.
Примечание. - Объявление класса становится очень важным, когда оба класса нуждаются друг в друге. если мы будем делать обычный оператор #import, тогда у нас будет бесконечный цикл импорта, а компиляторы не любят бесконечные циклы. Поэтому мы используем @class Classname
.
Ответ 4
@class
используется для создания прямого объявления любого класса. Если вы создаете какой-либо класс, реализация которого неизвестна вам, вы можете сделать это, используя директиву @class
.
Вы можете реализовать этот класс, когда реализация известна вам.