如何在UIImage中优化内存使用

时间:2014-02-24 18:42:32

标签: ios objective-c uiwebview uiimageview uiimage

我尝试截取uiwebview的截图并将其与观察者一起发送到另一个类中的另一个UIImageView。  我用这种方法截取屏幕截图:

    -(UIImage*)takeScreenshoot{
    @autoreleasepool {
        UIGraphicsBeginImageContext(CGSizeMake(self.view.frame.size.width,self.view.frame.size.height));
        CGContextRef context = UIGraphicsGetCurrentContext();
        [self.webPage.layer renderInContext:context];
        UIImage *__weak screenShot = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return screenShot;
    }

}

但后来我有问题。每当我用这种方法截取屏幕截图时,内存率大约增加到10-15mb,而且它没有意识到。如果我在每个webviewdidfinishload中截取屏幕截图,你可以想象它可以占用多少内存!

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果可能,请尝试使用[UIScreen snapshotViewAfterScreenUpdates] returns UIView。 这是当前显示内容的快照(应用程序的快照)。

甚至苹果也说“this method is faster than trying to render the contents of the screen into a bitmap image yourself。”

根据您的代码,您将传递此位图图像以仅显示在其他一些UIImageView中。所以我认为使用UIScreen方法是合适的。

仅显示UIWebView部件 - >

创建另一个UIView实例。
将其框架设置为webView的框架 现在将此screenShot视图作为subView添加到createdView并设置其框架,以便显示webView部分。

答案 1 :(得分:-1)

屏幕截图后,请尝试拨打CGContextRelease(context);

或者正如@Greg所说,删除该行并直接使用UIGraphicsGetCurrentContext()