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

时间:2013-01-05 14:12:48

标签: ios cocos2d-iphone components

我使用的是Cocos2d 2.x和iOS 5.0。

有人可以与我分享一个关于“@ class Component”标签用法的好教程或解释吗?

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

我在google search上找不到多少。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

它的工作方式是通常如果你在一个接口中引用一个类,你必须#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.h头,否则第三类不了解OtherClass。在编写应该隐藏开发人员实现细节(即OtherClass)的公共API时,这很有用。

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

我不了解Xcode,但在Visual Studio(C ++)中,类转发对于加速数百个类的大型项目的编译也很有帮助。那是因为VS C ++编译器花了相当多的时间来解析头依赖