2012-09-18 93 views
0

我試圖創建一些數據的視覺表示。iOS iPhone CGImage內存問題

我的工作原理是創建完美的圖像(並非常快速),但是在真正的內存使用率火箭下,最終導致應用程序崩潰。

我用return [UIImage imageNamed:@"blah"];取代了我的功能,內存問題完全消失。

想知道是否有人能夠看到爲什麼和在哪裏記憶被採取以及我如何可能再次釋放它?

我已經在配置和泄漏工具下運行儀器,但沒有顯示在那裏。

功能是...

- (UIImage*)imageOfMapWithDeadColor:(UIColor *)deadColor aliveColor:(UIColor *)aliveColor 
{ 
//translate colours into rgb components 
if ([deadColor isEqual:[UIColor whiteColor]]) { 
    dr = dg = db = 255; 
} else if ([deadColor isEqual:[UIColor blackColor]]) { 
    dr = dg = db = 0; 
} else { 
    [deadColor getRed:&drf green:&dgf blue:&dbf alpha:&blah]; 

    dr = drf * 255; 
    dg = dgf * 255; 
    db = dbf * 255; 
} 

if ([aliveColor isEqual:[UIColor whiteColor]]) { 
    ar = ag = ab = 255; 
} else if ([aliveColor isEqual:[UIColor blackColor]]) { 
    ar = ag = ab = 0; 
} else { 
    [aliveColor getRed:&arf green:&agf blue:&abf alpha:&blah]; 

    ar = arf * 255; 
    ag = agf * 255; 
    ab = abf * 255; 
} 

//create bytes of image from the cell map 
int yRef, cellRef; 

unsigned char *cell_ptr = cells; 

for (int y=0; y<self.height; y++) 
{ 
    yRef = y * (self.width * 4); 

    int x = 0; 
    do 
    { 
     cellRef = yRef + 4 * x; 

     if (*cell_ptr & 0x01) { 
      //alive colour 
      buffer[cellRef] = ar; 
      buffer[cellRef + 1] = ag; 
      buffer[cellRef + 2] = ab; 
      buffer[cellRef + 3] = 255; 
     } else { 
      //dead colour 
      buffer[cellRef] = dr; 
      buffer[cellRef + 1] = dg; 
      buffer[cellRef + 2] = db; 
      buffer[cellRef + 3] = 255; 
     } 
     cell_ptr++; 
    } while (++x < self.width); 
} 

//create image 
imageRef = CGImageCreate(self.width, self.height, 8, 32, 4 * self.width, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, provider, NULL, NO, kCGRenderingIntentDefault); 

UIImage *image = [UIImage imageWithCGImage:imageRef]; 

//return image 
return image; 
} 

幾個音符...

緩衝區伊娃GLubyte的malloc-ED在init。 單元格是我從中取數據的原始無符號字符數組。

就像我說過的,該功能完美地工作(創建圖像等......)我只是得到大量的內存使用。

哦......這個函數被稱爲LOTS,就像每秒30次或更多(我知道會有所作爲)。

感謝您的任何幫助。

回答

4

您使用CGImageCreate和文檔說:

返回值 新石英位圖圖像。你有責任通過調用CGImageRelease來釋放這個對象。

+0

令人驚歎!謝謝!我不知道我是如何錯過的。現在完美運作。 (當定時器用完時將接受正確答案) – Fogmeister

+0

很高興我能幫到你! – Tom