特定情况下的对象类别的目的。

时间:2012-03-05 16:57:06

标签: objective-c categories

我在Objective-C上很新,我有一个问题:

我已经浏览了一些Apple的示例代码并找到了以下内容:

https://developer.apple.com/library/ios/#samplecode/GLSprite/Listings/Classes_EAGLView_m.html#//apple_ref/doc/uid/DTS40007325-Classes_EAGLView_m-DontLinkElementID_4

在文件顶部,我发现使用了Objective-C类别

@interface EAGLView (EAGLViewPrivate)

- (BOOL)createFramebuffer;
- (void)destroyFramebuffer;

@end


@interface EAGLView (EAGLViewSprite)

- (void)setupView;

@end

在此之后,开始实施EAGLView类。

这里的类别的真正目的是什么,因为上面的3个函数也可以直接在头文件中定义?

Thx

1 个答案:

答案 0 :(得分:6)

如第一个类别的名称(“EAGLViewPrivate”)所示,在.m文件中声明这些方法是一种模拟私有方法的方法。 Objective-C没有对私有方法的真正支持,但由于这些没有在.h文件中声明,编译器会在.m文件中声明它们被试图调用它们的代码时发出警告。

现在更常见的是类扩展(类别的特殊情况),主要是因为如果在类的@implementation块中没有实现“私有”方法,则使用类扩展会导致编译器发出警告。类扩展是Objective-C 2.0中的一项新功能,因此在旧代码中,您经常会看到名称中包含private的类别,就像您发布的代码一样。意图是一样的。