Ios 核心图形图像混合不';t释放存储器

Ios 核心图形图像混合不';t释放存储器,ios,objective-c,memory-management,core-graphics,Ios,Objective C,Memory Management,Core Graphics,我正在用以下代码混合两幅图像: + (UIImage *)xxx_blendedImageWithFirstImage:(UIImage *)image secondImage:(UIImage *)secondImage renderedInFrame:(CGRect)frame alpha:(CGF

我正在用以下代码混合两幅图像:

+ (UIImage *)xxx_blendedImageWithFirstImage:(UIImage *)image
                                secondImage:(UIImage *)secondImage
                            renderedInFrame:(CGRect)frame
                                      alpha:(CGFloat)alpha {
    UIGraphicsBeginImageContextWithOptions(frame.size, NO, UIScreen.mainScreen.scale);
    
    [image drawInRect:frame];
    [secondImage drawInRect:frame blendMode:kCGBlendModeNormal alpha:alpha];
    
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}
对于
UISlider
,在
iAction
中调用此代码,以便在每次滑块位置更改时调用它。这是此代码的内存占用:

它需要230 MB,然后由于内存压力而失败


如何使此代码正常工作?

如果已将此iAction与xib中的
值更改事件连接,请在后台线程上执行此操作<代码>确保在主线程上执行所有UI更改

否则,将此iAction与
内部润色事件连接。之后,当您在一次拖动中离开滑块一次时,将调用此方法。(并非适用于所有拖动值)


希望在添加
@autoreleasepool
后,它能解决您的问题:

+ (UIImage *)xxx_blendedImageWithFirstImage:(UIImage *)image
                                secondImage:(UIImage *)secondImage
                            renderedInFrame:(CGRect)frame
                                      alpha:(CGFloat)alpha {
    UIImage *newImage = nil;
    @autoreleasepool {
        UIGraphicsBeginImageContextWithOptions(frame.size, NO, UIScreen.mainScreen.scale);

        [image drawInRect:frame];
        [secondImage drawInRect:frame blendMode:kCGBlendModeNormal alpha:alpha];

        newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    return newImage;
}
也许应该有一些手动版本,但是现在内存占用看起来像:

在iOS 4及更高版本中,您可以从应用程序的任何线程调用此函数@pawan是的,它正在处理主线程,但问题是内存