我的理解是,如果ClassA需要包含ClassB标头,而ClassB需要包含ClassA标头以避免任何循环包含,则应该使用前向类声明。我还理解#import
是一个简单的ifndef
,因此包含只发生一次。
我的问题是:什么时候使用#import
,什么时候使用@class
?有时如果我使用@class
声明,我会看到一个常见的编译器警告,如下所示:
warning: receiver 'FooController' is a forward class and corresponding @interface may not exist.
真的很想理解这一点,而不仅仅是删除@class
前向声明并抛出#import
来沉默编译器给我的警告。