Ios 为什么在Objective-C中使用@class?

Ios 为什么在Objective-C中使用@class?,ios,objective-c,oop,Ios,Objective C,Oop,为什么我们要在这段代码中使用@class forward声明?如果我们注释掉@class PAWLoginViewController;,会发生什么;?谢谢 它是一个正向声明,让编译器知道类存在,而不必查看完整的类声明。它旨在节省编译时间 编辑感谢@nielsbot提醒我,在导入头文件时,它也有助于避免循环依赖,即A.h导入B.h,而B.h导入A.h 如果您确实希望像access成员一样使用类或从中派生类,那么编译器将需要查看类声明,这通常是使用import pre-processor语句完成的

为什么我们要在这段代码中使用@class forward声明?如果我们注释掉@class PAWLoginViewController;,会发生什么;?谢谢

它是一个正向声明,让编译器知道类存在,而不必查看完整的类声明。它旨在节省编译时间

编辑感谢@nielsbot提醒我,在导入头文件时,它也有助于避免循环依赖,即A.h导入B.h,而B.h导入A.h


如果您确实希望像access成员一样使用类或从中派生类,那么编译器将需要查看类声明,这通常是使用import pre-processor语句完成的。

简单地说,如果您注释掉@class,那么它会将错误显示为未知类型名。因为您正在参数中传递类引用。但是您还没有声明类名。

我认为与其节省编译时间,还不如节省整个头文件的导入和头文件的相互依赖性。@nielsbot如果不节省编译时间,避免读取大量头文件有什么好处?然而,你是对的,它也避免了循环依赖。避免头文件的相互依赖,正如我所说的循环依赖,是你的意思。也许在大多数情况下,是的。否决,因为你可以只是注释掉它
#import <UIKit/UIKit.h>

@class PAWLoginViewController;

@protocol PAWLoginViewControllerDelegate <NSObject>

- (void)loginViewControllerDidLogin:(PAWLoginViewController *)controller;

@end