2011-07-13 18 views
1
以下

は.. colorRefArrayが既にメモリとCreateColor()を有する次のような状況でメモリを解放するには?

 CGColorRef colorRefArray[MAGIC_NUM]; 

     for (int i = 0; i < MAGIC_NUM ; i++) 
     { 
      ... 

      colorRefArray[i] = CreateColor(colorValueForEachColor, numberofcomp);     
     } 

いくつかのコア・グラフィックス・コードです。再びメモリを作成し、メモリリークを引き起こします。

どうすればこのような状況を回避できますか?私が持っている

一つの可能​​な考えが

  CGColorRef colorRefArray[MAGIC_NUM]; 

      for (int i = 0; i < MAGIC_NUM ; i++) 
      { 
       ... 
       CGColorRef colorref = CreateColor(colorValueForEachColor, numberofcomp); 
       colorRefArray[i] = colorref; 
       CFRelease(colorref); 

      } 

は、このアプローチが正しいですか?

答えて

2

いいえ、そうではありません。作成した色をただちに解放します。その後、colorRefArrayが無効なポインタで満たされることになるので、

CGColorRef colorRefArray[MAGIC_NUM]; 
for (int i = 0; i < MAGIC_NUM ; i++) 
{ 
    ... 
    colorRefArray[i] = CreateColor(colorValueForEachColor, numberofcomp);     
} 
//Use your colors 
//Now release them 
for (int i = 0; i < MAGIC_NUM ; i++) 
{ 
    CFRelease(colorRefArray[i]); 
} 
3

いいえ、正しいアプローチはこれだろう。

生のC配列の代わりにCFMutableArrayを使用してみてください。次に、配列の参照について心配する必要があります。

関連する問題