objective-c - Objective-c头文件中类和接口(interface)的关键字

标签 objective-c

<分区>

Possible Duplicate:
@class vs. #import

我是 Objective-c 的新手,我看过一个例子:

#import <UIKit/UIKit.h>

@class MapKitSampleViewController;

@interface MapKitSampleAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MapKitSampleViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet MapKitSampleViewController *viewController;

@end

以上代码保存在“MapKitSampleAppDelegate.h”文件中,请问第3行“@class MapKitSampleViewController;”是什么意思?我们可以将其更改为#import "MapKitSampleViewController.h"吗?

最佳答案

I want to ask what is the meaning of line 3 "MapKitSampleViewController"? Can we change it to #import "MapKitSampleViewController.h"?

是的。

@class 关键字是一个“前向声明”。您告诉编译器的是,此类将在此类中使用,但它的头文件导入将在其他地方。

如果您查看 .m 文件,您很可能会发现 #import "MapKitSampleViewController.h"会在那里。

为什么?

之所以实现(无论如何我认为)是为了防止循环导入。想象一下发生以下情况的场景:

类1.h

#import Class2.h

类2.h

#import Class1.h

现在,如果我没记错的话,这里发生的是在编译过程中,它会重复导入 header 和坏事。 @class 关键字旨在防止这种情况发生,因为这些文件的导入将发生在 .m 文件中,而不是在 .h 文件中。

顺便说一句,这是 @class vs. #import 的副本

因此您可能会在该问题上找到关于该主题的更深入的讨论。

关于objective-c - Objective-c头文件中类和接口(interface)的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512106/

相关文章:

ios - 在 UICollectionView 中禁用滚动并调整其大小以包裹所有单元格

iphone - 从 URL 读取 JSON 并添加 MKAnnotations

iOS 运行时 : Use Case

ios - 不确定方法内未使用的 subview 分配

objective-c - 如何从 PDF 页面获取文本?

objective-c - 如何更改 NSOutlineView 中节点的样式?

iOS高亮多个UITableViewCells

objective-c - CALayer:线性渐变问题

具有动态高度的 iOS UIView 取决于内部元素的数量

ios - 如何修复 SafeAreaLayoutGuide