我正在开发一个 iPhone 视频解码器应用程序。我需要为每一帧转换原始像素数据并在屏幕上连续渲染(因此形成视频)。下面的函数是在屏幕上呈现每一帧的函数。
- (void)drawBufferWidth:(int)width height:(int)height pixels:(unsigned char*)pixels
{
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef gtx = CGBitmapContextCreate(pixels, width, height, BitsPerComponent, BytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
myimage = CGBitmapContextCreateImage(gtx); //myimage is of type CGImageRef
CGContextRelease(gtx);
img.image = [UIImage imageWithCGImage:myimage]; //img is of type UIImageView
[CATransaction flush];
CGImageRelease(myimage);
myimage = Nil;
}
该代码在模拟器上运行良好。当我在设备上运行它时,它显示几帧,给出“收到内存警告”并崩溃。
我无法弄清楚问题出在哪里。我是否没有正确解除分配,或者即使我正在释放图像,它仍然存在于内存中,从而占用了内存?
请帮忙!
提前致谢。
编辑:
Xcode 组织者说如下:
hevcd[665] has active assertions beyond permitted time:
{(
<SBProcessAssertion: 0x11aacf70> identifier: Suspending process: hevcd[665] permittedBackgroundDuration: 10.000000 reason: suspend owner pid:565 preventSuspend preventThrottleDownCPU preventThrottleDownUI
)}