По моему мнению, следует использовать объявление прямого класса в случае, когда ClassA должен включать заголовок ClassB, а ClassB должен включать заголовок ClassA, чтобы избежать любых циклических включений. Я также понимаю, что #import является простым ifndef, так что включение включается только один раз.
Мой запрос таков: когда используется #import и когда используется @class? Иногда, если я использую объявление @class, я вижу общее предупреждение о компиляторе, например следующее:
warning: receiver 'FooController' is a forward class and corresponding @interface may not exist.
Было бы очень приятно понять это, вместо того, чтобы просто удалить декларацию @class forward и объявить #import, чтобы отключить предупреждения, которые компилятор мне дает.