这两个类声明之间有什么区别?我不明白这里为什么使用@class.谢谢

@class TestClass;

@interface TestClass: UIView {
    UIImage *image1;
    UIImage *image2;
}

@interface TestClass: UIView {
    UIImage *image1;
    UIImage *image2;
}

推荐答案

@class的存在打破了循环依赖.假设你有A班和B班.

@interface A:NSObject
- (B*)calculateMyBNess;
@end

@interface B:NSObject
- (A*)calculateMyANess;
@end

鸡见见蛋.这永远无法编译,因为A的接口依赖于B的定义,反之亦然.

因此,可以使用@class:

@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end

@interface B:NSObject
- (A*)calculateMyANess;
@end

@class有效地告诉编译器这样一个类存在于某个地方,因此,声明指向所述类实例的指针是完全有效的.但是,您无法对类型仅定义为@class的实例引用调用方法,因为编译器没有其他可用元数据(我不记得它是否将调用站点还原为通过id进行的调用求值).

在你的例子中,@class是无害的,但完全没有必要.

Objective-c相关问答推荐

如何使用 iOS 7 SpriteKit 粒子向非游戏的 iOS 应用程序添加粒子效果?

当 UITextField 成为第一响应者时如何使 UIScrollView 自动滚动

检测 NSString 的语言

将 CSS 插入 UIWebView / WKWebView 中加载的 HTML

为什么当我使其处于非活动状态时,弱 IBOutlet NSLayoutConstraint 变为 nil?

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

我怎样才能拥有一个同时包含图像和文本的 UIBarButtonItem?

增加推送通知徽章 iPhone

动态转发: suppress Incomplete Implementation 警告

NSUInteger 不应该在格式字符串中使用吗?

UIWebView 不会zoom 内容以适应

声音在 iPhone 模拟器中不起作用?

从 UIImage 获取 Exif 数据 - UIImagePickerController

判断是否已实现可选协议方法

iOS 11 large-title导航栏不折叠

iOS 7 中的 UITextView 链接检测

如何实现全局 iPhone 异常处理?

@package 指令在 Objective-C 中的作用是什么?

如何使用图像和标签制作自定义 UIBarButtonItem?

在 iOS 8 中使用 NSMutableAttributedString 的字符串的下划线部分不起作用