Случайно вы можете получить круговой импорт:
// A.h
#import "B.h"
// B.h
#import "A.h"
Препроцессор будет включать B.h в A.h, который, в свою очередь, включает A.h (потому что B.h импортирует его), который, в свою очередь, снова импортирует B.h и т. Д. До бесконечности.
@class
операторы предотвращают эту случайную ошибку, поскольку ошибка, вызванная циклическим импортом, действительно ДЕЙСТВИТЕЛЬНО неинтуитивна (если исходить из личного опыта и проверок следов / ошибок).