2012-05-14 2 views
1

Можно создать дубликат:
@class vs. #import
Cocoa: What's the difference between importing in the header and importing in the main file?В чем разница между импортом класса в файле интерфейса и форвардной декларацией (@class)?

Я просто хотел бы знать, в чем разница между импортом файла заголовка в нашем файле интерфейса и используя @class в нашем файле интерфейса? И я заметил, что если мы импортируем заголовочный файл в наш файл интерфейса, мы можем напрямую создавать наши экземпляры этого класса. В отличие от импорта файла заголовка, у нас есть что-то вроде использования @class в файле интерфейса и импорта заголовка в файле реализации? Может ли кто-нибудь пролить свет на это?

ответ

9

@class просто ссылается на класс, в то время как импорт имеет сильную привязку к классу, что он включает в себя методы класса и его внедрение. @ Class также используется для обхода кругового или замкнутого контура. Директива @class просто обещает компилятор, что класс существует, но больше ничего не говорит об этом классе, в то время как импорт имеет ссылку на каждого члена класса, чтобы компилятор времени выполнения мог знать.

1

Использование передовых деклараций и импортирование заголовков зависит только от файла реализации, это лучшая практика. Если вы импортируете в файл заголовка, вы создаете зависимости для компилятора. Скажем, вы импортируете a.h в b.h, а затем b.h в c.h. Теперь, когда вы что-то меняете в a.h, компилятору также придется перекомпилировать c.m, потому что его зависимости изменились.

Если вы, например, добавьте #define или #import в ваш предварительно скомпилированный файл заголовка (.pch), все ваши файлы должны быть перекомпилированы.

Объектив-C имеет защиту от множественного импорта (сравните #include), поэтому вам не нужно будет проверять наличие нескольких импортированных файлов одного и того же заголовочного файла.

Смежные вопросы