OpenGL:关于super / self的问题

时间:2011-09-06 20:50:38

标签: objective-c opengl-es

我刚开始根据个人兴趣试用一本OpenGL书,并碰到以下代码:

@implementation GLView

+(Class) layerClass {

// This method returns the CALayer class object by default. Subclasses can override this method and return a different layer class as needed. For example, if you use OpenGL ES to do your drawing, you would override this method and return the class object for the CAEAGLLayer class.

return [CAEAGLLayer class];

}

-(id) initWithFrame: (CGRect) frame {

if(self = [super initWithFrame:frame]) {

    CAEAGLLayer* eaglLayer = (CAEAGLLayer*) super.layer;
    eaglLayer.opaque = YES;

    m_context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES1];

    if(!m_context || ![EAGLContext setCurrentContext:m_context]) {
        [self release];
        return nil;
    }
}
return 0;
}

我试着了解整个过程中的每一步,我已经在这段代码中有两个主要问题。 如果我们在这里使用有什么区别:“self.layer”而不是“super.layer”? 当前类(在名为“GLView”的示例中)继承自UIView;为什么我们会打电话给超级,实际上它可能有什么不同?

其次,我不明白为什么se必须在这里释放“self”而不是“m_context”,因为它是被分配内存的上下文。 感谢您的回复,并对任何愚蠢的问题感到抱歉!

1 个答案:

答案 0 :(得分:2)

一般答案 - 这是学习编码的一个非常糟糕的例子,因为这本特定的书混合了C ++和Objective-C - 在这种情况下,许多事情变得非常混乱和复杂。

具体答案:

  1. self是该方法所属的类,superself继承自的类

  2. 我们正在释放self,因为我们遇到了无法恢复的失败 - 所以我们既不需要上下文也不需要任何其他内容。