在Objective C中,@class是什么以及何时使用该指令?

22 浏览
0 Comments

在Objective C中,@class是什么以及何时使用该指令?

这个问题在这里已经有了答案:

@class vs. #import

我非常困惑 @class 是什么?当我使用这个指令时它的作用是什么?

什么时候使用这个指令以及为什么要使用它?我没有找到任何合适的链接告诉我为什么、什么时候以及如何使用?请举个例子告诉我。

admin 更改状态以发布 2023年5月21日
0
0 Comments

它告诉编译器指定的类存在,这样它不会抱怨使用未知的类型。

委托协议的声明可能会说明这一点:

@class SomeClass;
@protocol SomeClassProtocol 
@optional
- (void)someClass:(SomeClass *)someClass didSomethingSpecial:(int)specialThing;
@end
@interface SomeClass: NSObject
...
@end

现在,如果不使用@class关键字,编译器将抱怨在协议方法中使用SomeClass类型,因为它尚未声明。

但是一个主要的问题是它只适用于对象引用(即SomeClass *),因为指向类型的指针不需要编译器了解类型的其他任何信息;例如,他不会适用于子类化:

这是非法的:

@class SomeClass;
@interface SomeOtherClass: SomeClass
...
@end

0
0 Comments

如果你说 @class MyClass,编译器会知道它可能会看到像下面这样的东西:\nMyClass *myObject;\n它不必担心除了 MyClass 是一个有效的类之外的任何事情,它只需为其保留指针的空间(实际上只是一个指针)。因此,在您的头文件中,@class 90% 的情况下就足够了。\n然而,如果您需要创建或访问 myObject 的成员,您需要让编译器知道这些方法是什么。此时(可能在您的实现文件中),您需要 #import \"MyClass.h\",告诉编译器除了“这是一个类”之外的其他信息。

0