我使用的是Cocos2d 2.x和iOS 5.0。
有人可以与我分享一个关于“@ class Component”标签用法的好教程或解释吗?
是否有任何设计/模式引用它或它是否做了更具体的代码?
我在google search上找不到多少。
答案 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 ++编译器花了相当多的时间来解析头依赖