2011-09-06 2 views
1

난 그냥 개인적인 관심에서의 OpenGL 책을 시도하기 시작하고 다음 코드에 부딪쳤다 :는 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; 
} 

내가 길을 따라 모든 단계를 이해하려고 노력하고 내가 두가 이미이 코드 조각의 주요 질문. 여기서 "super.layer"대신 "self.layer"를 사용하면 어떻게됩니까? 현재 클래스 (예 : "GLView")는 UIView에서 상속받습니다. 왜 우리는 슈퍼를 부르며 실제로 어떤 차이를 만들 수 있습니까?

둘째, 나는 왜 여기에 "m_context"대신 "self"를 릴리스해야하는지 이해하지 못합니다. 왜냐하면 메모리가 할당 된 컨텍스트이기 때문입니다. 답장을 보내 주셔서 감사 드리며 바보 같은 질문에 사과드립니다.

+0

내가 코드를 어디서 얻었는지에 관심이 있다면. 확인 : O'reilly iPhone 3D 프로그래밍. www.wowebook.com에서 다운로드 할 수 있습니다. – Trace

+1

이것은 OpenGL과 직접 관련이 없지만 OpenGL을 사용하는 Objective-C 언어와 관련이 있습니다. – Macmade

+0

즉,이 코드를 이해하려면 Objective-C를 배워야합니다. OpenGL은 다른 언어와 함께 사용할 수 있습니다. 가장 좋은 방법은 C 예제를 찾는 것이므로 기본 사항을 이해하고 다른 언어 또는 수퍼 세트에 적용 할 수 있습니다. – Macmade

답변

2

일반적인 답변 -이 특정 책은 C++과 Objective-C가 혼합되어 있기 때문에 코드를 배우기에 좋지 않은 예제입니다. 이러한 상황에서 많은 것들이 복잡하고 복잡합니다.

구체적인 답변 : 우리가 있었기 때문에

  1. self이 방법의 일부라는 클래스, super

  2. 에서 self 상속 우리가 self을 확보하고있는 클래스입니다 복구 불가능한 오류 - 그래서 우리는 문맥이나 다른 어떤 것도 필요로하지 않습니다.

+0

위의 예에서 C++ 코드는 어디에서 볼 수 있습니까? – Macmade

+0

아, 책을 안다 :-) 그래도 나는이 물건을 배우고 싶어서 고생하려고 노력할 것이다. 좋아, 자아의 석방은 완벽 해. 그리고 당신의 회신을 잘 이해한다면,이 경우 자기 나 슈퍼를 사용하면 별 문제가되지 않습니다. 감사! – Trace

+0

@Macmade, 책에 있습니다. –