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是的,它正在处理主线程,但问题是内存