2011-07-13 61 views
1

下面是一些核心圖形代碼..如何在下列情況下釋放內存?

 CGColorRef colorRefArray[MAGIC_NUM]; 

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

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

colorRefArray已經具有存儲器和CreateColor();會再次創建一個內存並導致內存泄漏。

我該如何避免這種情況?

一個可能的想法我是

  CGColorRef colorRefArray[MAGIC_NUM]; 

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

      } 

是這種做法是否正確?

回答

2

不,它不是。您立即釋放您創建的顏色。正確的方法是這樣的:

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

不,因爲colorRefArray將被填充無效指針。

嘗試使用CFMutableArray而不是原始C數組。那麼你只需要擔心對陣列的參考,因爲它會擁有你的顏色:

CFArrayRef CopyColorArray(void) { 
    CFMutableArrayRef colorRefArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks); 
    if (colorRefArray) { 
     for (int i = 0; i < MAGIC_NUM ; i++) { 
      ... 
      CGColorRef colorref = CreateColor(colorValueForEachColor, numberofcomp); 
      if (colorref) { 
       CFArrayAppendValue(colorRefArray, colorref); 
       CFRelease(colorref); 
      } 
     } 
    } 

    return colorRefArray; 
} 
相關問題