내 iPhone 응용 프로그램에서 디스크에 캐시 된 큰 이미지가 있고 그 이미지를 많이 처리하는 클래스에 이미지를 전달하기 직전에 이미지를 검색합니다. 수신 클래스는 초기화를 위해 이미지를 잠시 필요로하며, 이미지 처리 코드가 매우 메모리 집약적이기 때문에 가능한 한 빨리 이미지를 차지하는 메모리를 해제하려고합니다. 그러나 어떻게해야할지 모르겠습니다.수신 방법에서 메모리를 빨리 해제하는 방법은 무엇입니까?
는보인다 :
// inside viewController
- (void) pressedRender
{
UIImage *imageToProcess = [[EGOCache globalCache] imageForKey:@"reallyBigImage"];
UIImage *finalImage = [frameBuffer renderImage:imageToProcess];
// save the image
}
// inside frameBuffer class
- (UIImage *)renderImage:(UIImage *)startingImage
{
CGContextRef context = CGBitmapCreateContext(....)
CGContextDrawImage(context, rect, startingImage.CGImage);
// at this point, I no longer need the image
// and would like to release the memory it's taking up
// lots of image processing/memory usage here...
// return the processed image
CGImageRef tmpImage = CGBitmapContextCreateImage(context);
CGContextRelease(context);
UIImage *renderedImage = [UIImage imageWithCGImage:tmpImage];
CGImageRelease(tmpImage);
return renderedImage;
}
이 분명있을 수 있습니다,하지만 내가 모르는 뭔가가있어. 고맙습니다.
autoreleasepool을 시도한 적이 있습니까? – BergQuester
autorelease 풀을 보았습니다.하지만 그 CGContextDrawImage 바로 뒤에 메모리를 해제하는 방법을 알지 못합니다. 자동 렌더링 풀은 전체 renderImage 메소드가 완료된 후 풀을 릴리스하는 것 같습니다 ... 너무 늦었습니다. 그러나 다시, autorelease pool에 대해서는 정통하지 않습니다. – pizzafilms
참조 된 컨텍스트를 해제하려면 반드시 CGContextRelease()를 추가해야합니다. –