@class 与 #import

据我了解,如果 ClassA 需要包括 ClassB 标头,而 ClassB 需要包括 ClassA 标头,以避免任何循环包含,则应使用前向类声明。我也理解#import是一个简单的ifndef因此包含仅发生一次。

我的查询是:什么时候使用#import和何时使用@class ?有时,如果我使用@class声明, @class看到常见的编译器警告,例如:

warning: receiver 'FooController' is a forward class and corresponding @interface may not exist.

真的很想了解这一点,而不是仅仅删除@class前向声明并抛出#import来使编译器向我发出的警告静音。

答案