Компилятор будет жаловаться только в том случае, если вы собираетесь использовать этот класс таким образом, что компилятору необходимо знать его реализацию.
Ex:
- Это может быть похоже на то, если вы собираетесь извлечь из него свой класс, или
- Если вы собираетесь использовать объект этого класса в качестве переменной-члена (хотя и редко).
Он не будет жаловаться, если вы просто собираетесь использовать его в качестве указателя. Конечно, вам нужно будет #import его в файле реализации (если вы создаете экземпляр объекта этого класса), так как он должен знать содержимое класса, чтобы создать экземпляр объекта.
ПРИМЕЧАНИЕ: #import отличается от #include. Это означает, что нет ничего, что называется круговым импортом. import - это своего рода запрос компилятора на поиск определенного файла для получения определенной информации. Если эта информация уже доступна, компилятор игнорирует ее.
Просто попробуйте это, импортируйте A.h в B.h и B.h в A.h. Там не будет никаких проблем или жалоб, и это будет работать нормально.
Когда использовать @ class
Вы используете @class, только если вы даже не хотите импортировать заголовок в свой заголовок. Это может быть случай, когда вам даже не важно знать, что это будет за класс. Случаи, когда у вас может даже не быть заголовка для этого класса.
Примером этого может быть то, что вы пишете две библиотеки. Один класс, назовем его A, существует в одной библиотеке. Эта библиотека содержит заголовок из второй библиотеки. Этот заголовок может иметь указатель A, но, опять же, может не потребоваться его использование. Если библиотека 1 еще не доступна, библиотека B не будет заблокирована, если вы используете @class. Но если вы хотите импортировать A.h, то прогресс библиотеки 2. будет заблокирован.