iPhoneアプリ(XCODE+ARC)でのメモリ解放について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
たまさん

iPhoneアプリ(XCODE+ARC)でのメモリ解放について

#1

投稿記事 by たまさん » 13年前

質問させて下さい。
現在、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);


閉鎖

“C言語何でも質問掲示板” へ戻る