做iOS平台的OpenGL程序 
基本框架按照《iPhone 3D Programming》书中介绍的来
其GLView封装在一个类里,相关代码如下- (id) initWithFrame: (CGRect) frame
{
    NSLog(@"fram e %f",frame.origin.x);
    if (self = [super initWithFrame:frame])
    {
        CAEAGLLayer* eaglLayer = (CAEAGLLayer*) self.layer;
        eaglLayer.opaque = YES;        EAGLRenderingAPI api = kEAGLRenderingAPIOpenGLES2;
        m_context = [[EAGLContext alloc] initWithAPI:api];
        
        if (!m_context) {
            api = kEAGLRenderingAPIOpenGLES1;
            m_context = [[EAGLContext alloc] initWithAPI:api];
        }
        
        if (!m_context || ![EAGLContext setCurrentContext:m_context]) {
            [self release];
            return nil;
        }
        m_resourceManager = Darwin::CreateResourceManager();
       m_applicationEngine = ParametricViewer::CreateApplicationEngine(m_renderingEngine);
        [m_context
            renderbufferStorage:GL_RENDERBUFFER
            fromDrawable: eaglLayer];
                
        int width = CGRectGetWidth(frame);
        int height = CGRectGetHeight(frame);
        
        NSLog(@"gl w - h    %d\t%d", width , height );
        m_applicationEngine->Initialize(width-50, height-50);
        [self drawView: nil];        
        CADisplayLink* displayLink;
        displayLink = [CADisplayLink displayLinkWithTarget:self
                                     selector:@selector(drawView:)];
        
        [displayLink addToRunLoop:[NSRunLoop currentRunLoop]
                     forMode:NSDefaultRunLoopMode];
    }
    return self;
}- (void) drawView: (CADisplayLink*) displayLink
{
    if (displayLink != nil) {
        float elapsedSeconds = displayLink.timestamp - m_timestamp;
        m_timestamp = displayLink.timestamp;
        m_applicationEngine->UpdateAnimation(elapsedSeconds);
    }
    
    m_applicationEngine->Render();    [m_context presentRenderbuffer:GL_RENDERBUFFER];
}
目前遇到的问题是
在两个ViewController中各有一个该GLView实例,在两个界面切换时必须重新初始化
否则无法正常显示,导致在切换界面时内存不停泄漏,直至程序崩溃初始化相关代码如下
http://
-(void) viewWillAppear:(BOOL)animated
{
    if(new_display)
    {
      //  [m_view release];
        CGRect screenBounds = [[UIScreen mainScreen] bounds];
        screenBounds.origin.y = 100 ;
        screenBounds.size.height -= 200 ;
               m_view = [[GLView alloc] initWithFrame: screenBounds];
        [self.view addSubview:m_view];
        new_display = false ;
    }
}- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    screenBounds.origin.y = 100 ;
    screenBounds.size.height -= 200 ;
    if(g_crc)
    t_crc = *g_crc;
    
    viewport_h =320 ,viewport_w =368;
    m_view = [[GLView alloc] initWithFrame: screenBounds];
    [self.view addSubview:m_view];
    
}
感觉问题有以下两个关键点
一是从根本上在OpengGL ES处解决,即如何保证GLView两个实例不冲突,可以同时正常显示
二是在初始化GLView实例时彻底释放内存
目前尝试将GL_RENDERBUFFER设为变量,  在重新初始化m_view前加  [m_view release]释放内存;
都没有解决问题。
之前用c,c++,第一次开发iOS程序
求助高手,谢谢。