[objective-c]意外的内容默认文件生成 opengl 中的模板 xcode

标签: Xcode Objective-C
发布时间: 2017/3/27 3:31:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我只在 xcode 开始一个新的 opengl 项目。当正要通过创建的默认文件的时候时,我不知所措这后在 viewController 接口的代码行。

@interface RetinaTestViewController ()  
    @property (nonatomic, retain) EAGLContext *context;
    @property (nonatomic, assign) CADisplayLink *displayLink; 
    - (BOOL)loadShaders; 
    - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type file:(NSString *)file; 
    - (BOOL)linkProgram:(GLuint)prog;  
    - (BOOL)validateProgram:(GLuint)prog; 
@end

我的问题就是为什么这写在 viewController 执行而不是接口本身。这可能是很基本,但我刚开始工作的 openGL 的东西。请帮助。

解决方法 1:

我不认为这真的是 OpenGL 相关,但 Objective-C ,我们称之为类别,允许您向现有类添加额外的方法。不管你有没有源代码,您可以添加它们到你想要的任何类。该语法类似于︰

@interface classname (categoryName)
    - (void)extraMethod1;
    - (void)extraMethod2;
@end

@implementation classname (categoryName)

- (void)extraMethod1
{
}

- (void)extraMethod2
{
}

@end

,正如我所说的你可以使用,将方法添加到任何类,包括例如 NSString、 NSDictionary 和其他的基础对象。

在接口声明中的类名后括号支配,这是一种类别,不完整的接口定义。历史上是没有办法向通过某一类别,类中添加额外的存储空间,所以你不可能声明成员变量在类中。因此是没有 {} 节。

在现代 (在 64 位 OS X 和 iOS) 运行时,您可以添加额外的存储空间,通过 @properties,苹果似乎在你已经给出的代码中做。

苹果在这里使用的分类方法来创建私有方法类似 — — 在这种情况下,班里的每个人都知道的方法有,但其中并不从外部声明。这是一个设计决定,以保持位其他人很可能来看整洁和表明程序员的意图。

什么是︰

  • 在头文件中声明的苹果想要别人了解的 RetinaTestViewController 位
  • 只有在实现文件中声明不会被暴露的位

一个精心设计的对象应该公开一个公共的接口和符合该接口,同时做一切必要做内部和保持它内部的秘密。

你可以读一点更多的分类方法在这里这里这里(滚动到 11 号)。

赞助商