2013-04-04 58 views
0

我只需要一些關於內存管理的幫助。我在屏幕上顯示大約500幀。我的應用似乎在模擬器上運行良好,但在iPad上顯示大約450幀後崩潰。由於內存不足,問題似乎即將到來。以下是我的代碼的一部分。我是否正確地釋放了對象,還是有更多需要做的事情?發佈目標中的對象C

- (void)drawBufferWidth:(int)width height:(int)height pixels:(unsigned char*)pixels 
{ 
    CGRect rect = CGRectInset(self.view.bounds, 0.0, 0.0); 
    UIImageView *img = [[UIImageView alloc] initWithFrame:rect]; 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef gtx = CGBitmapContextCreate(pixels, width, height, BitsPerComponent, BytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast); 
    CGImageRef myimage = CGBitmapContextCreateImage(gtx); 
    img.image = [UIImage imageWithCGImage:myimage]; 

    CGContextRelease(gtx); 
    CGImageRelease(myimage); 
    CGColorSpaceRelease(colorSpace); 
} 
+0

你使用ARC還是不是? – 2013-04-04 16:25:20

+0

不,我不使用... – Ereka 2013-04-04 16:25:56

+0

按Ctrl + f找到分配...你的IMG是分配但從未發佈 – brianLikeApple 2013-04-04 16:28:49

回答

5

此方法似乎泄漏了您在第二行創建的UIImageView。你有一個alloc沒有相應的releaseautorelease。我說「出現」是因爲我懷疑你沒有包含所有的方法(你不會向我們展示任何與你的UIImageView執行任何操作的代碼...)。

您對各種CGRefs的管理很好。

+0

噢,好的..我需要做哪些事情? UIImageView * img = [[[UIImageView alloc] initWithFrame:rect] autorelease]; OR [img release]; – Ereka 2013-04-04 16:31:41

+0

沒有看到你的代碼的其餘部分,很難給出準確的答案,但'autorelease'是更安全的答案。 – 2013-04-04 16:33:04

+0

好的,非常感謝您的回覆! +1的答案。 :) – Ereka 2013-04-04 16:40:01