Cocos2D/iOS:“@class 组件”标签的使用

Posted

技术标签:

【中文标题】Cocos2D/iOS:“@class 组件”标签的使用【英文标题】:Cocos2D/iOS: usage of "@class Component" tag 【发布时间】:2013-01-05 14:12:48 【问题描述】:

我正在使用 Cocos2d 2.x 和 ios 5.0。

谁能给我分享一个关于“@class Component”标签用法的好教程或解释?

是否有任何引用它的设计/模式,或者它是否对代码做了更具体的事情?

我在google search 上没有找到太多信息。

【问题讨论】:

【参考方案1】:

@class 只是告诉编译器它后面的名字是一个 Objective-C 类的名字。当需要定义该类型的符号但导入整个定义会过度杀伤或导致实际问题时,它会在 .h 文件中使用。 (例如,两个类相互引用。)

【讨论】:

官方术语是“前向声明”。也在这里详细讨论:***.com/questions/5191487/…【参考方案2】:

它的工作方式是,通常如果你在接口中引用一个类,你必须#import那个类的头文件:

#import "OtherClass.h"

@interface MyClass : NSObject

   OtherClass* someOtherClass;

@end

@class 语句允许您跳过导入标头:

@class OtherClass;

@interface MyClass : NSObject

   OtherClass* someOtherClass;

@end

如果你使用@class,你仍然需要在实现文件中#import "OtherClass.h"。

// Still need to import, but now any class importing MyClass.h 
// does not automatically know about OtherClass as well.

#import "OtherClass.h"

@implementation MyClass
…
@end

当你#import "MyClass.h" 在第三类的其他地方时,如果你使用了@class OtherClass,那么第三类不会自动包含OtherClass 类的标题;在 MyClass 标题中。因此,第三个类不知道 OtherClass,除非它明确导入 OtherClass.h 标头。这在编写应向开发人员隐藏其实现细节(即 OtherClass)的公共 API 时很有帮助。

前向声明被认为是一种很好的做法(如果只是因为它除了稍微改变了工作流程之外没有其他缺点)而且比在另一个头文件中导入类的头文件更可取。这无疑有助于防止 Phillip 提到的循环进口。

我不了解 Xcode,但在 Visual Studio (C++) 中,类转发也有助于加快具有数百个类的大型项目的编译速度。那是因为 VS C++ 编译器花了相当长的时间解决头文件依赖关系

【讨论】:

以上是关于Cocos2D/iOS:“@class 组件”标签的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cocos2D 应用程序中拍照(iOS 6)

React的class组件及属性详解!

replacescene 在我的游戏 cocos2d ios 中停止背景音乐

cocos2d iOS 中的 Post Path Projection ( trail )

cocos2d iOS游戏录制视频,视频低分辨率,正常情况下高分辨率

Python3 tkinter初级