現在、iPhone向けにアプリを制作していまして、xcode4.5でARCをオンにして作っています。
内容は2Dゲームなのですが、画像を非常に多く使うためOpenGLES1.1を使用する事にしました。
それで質問というのは、OpenGLでの画像描画は問題なかったのですが、文字列を描画するために
幾つかのサイトを参考にしながら、文字列(UILabel)からImageを作成し、それをテクスチャに貼りつける、という方法を用いました。
すると、見た目上は何も問題ないのですが、どうやらメモリ解放がうまくいっていないらしく、
文字列の描画を続けていくと、どんどん使用メモリが溜まっていくようになってしまい、最終的には強制終了してしまいます。
どの部分でメモリが蓄積しているか探ってみたのですが、恐らく下記のソース部分だと思われます。
※試しにコンテキストのサイズを極端に小さくしたら、ほぼメモリが蓄積されなかったためです。
iPhone開発の勉強を始めた当初からARCはオンで、ほぼメモリ解放の知識を持たないまま来てしまったため、
どこの部分でメモリが溜まり、どう解放すれば良いか等、アドバイス頂けますと幸いです。
よろしくお願い致します。
//まずここまでにイメージの元となるUIラベルを作成
unsigned char *bmp;
CGContextRef context;
CGColorSpaceRef colSpace;
bmp=malloc(size.width*size.height*sizeof(unsigned char)*4);
colSpace=CGColorSpaceCreateDeviceRGB();
context=CGBitmapContextCreate(bmp,size.width,size.height,8,size.width*4,colorSpace,kCGImageAlphaPremultipliedFirst);
CGContextSetShouldAntialias(context,0);
CGContextClearRect(context,CGRectMake(0,0,size.width,size.height));
UIGraphicsPushContext(context);
CGContextTranslateCTM(context,0,size.height);
CGContextScaleCTM(context,1,-1);
//ここでラベルの内容を描画
[label.layer renderInContext:context];
CGImageRef imageRef=CGBitmapContextCreateImage(context);
UIImage* image=[[UIImage alloc] initWithCGImage:imageRef];
//解放
UIGraphicsPopContext();
CGColorSpaceRelease(colSpace);
CGContextRelease(context);
free(bmp);