2011-08-22 69 views
0

我想出了一個錯誤「* - [UIImage release]:發送到釋放實例的消息」。這是我正在做的。UIImage釋放錯誤 - *** - [UIImage發佈]:發送到釋放實例的消息

void imageFromPicture(AVPicture *pict, int width, int height) 
{ 
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, pict->data[0], pict->linesize[0]*height,kCFAllocatorNull); 
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data); 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGImageRef cgImage = CGImageCreate(width, 
          height, 
          8, 
          24, 
          pict->linesize[0], 
          colorSpace, 
          bitmapInfo, 
          provider, 
          NULL, 
          NO, 
          kCGRenderingIntentDefault); 
CGColorSpaceRelease(colorSpace); 
UIImage *image = [UIImage imageWithCGImage:cgImage]; 
CGImageRelease(cgImage); 
CGDataProviderRelease(provider); 
CFRelease(data); 

[ref_to_self display: image]; 
[image release]; 
} 

- (void) display:(UIImage*)image 
{ 
self.ImageView.image = image; 
} 

現在,函數imageFromPicture在無限循環中被連續調用,直到出現一些中斷條件。這用於顯示連續的圖像序列。此代碼正常工作,但是在顯示所有圖像並且控件返回到操作系統後,出現此錯誤。

有人可以告訴我我在做什麼錯。我不太瞭解客觀的C內存管理。

回答

1

此行

UIImage *image = [UIImage imageWithCGImage:cgImage]; 

返回一個自動釋放的對象,所以這條線

[image release]; 

是不必要的,無效。

+0

好吧,如果我照你說的那樣在iOS模擬器上正常工作,但是當我將應用程序放在設備上時,應用程序在中間崩潰,說內存級警告= 1。這就是爲什麼我添加了行[image release]在我的代碼中。 – Rohan

+0

你是否在循環中多次這樣做?使用'NSAutoreleasePool'來緩解一些內存壓力。 – jtbandes

+0

好吧,我會嘗試,同時你可以請我指向一些示例代碼片段或文件,我可以參考使用NSAutoreleasePool,我不太瞭解客觀C.謝謝.. – Rohan

相關問題