我正在制作照片幻灯片应用。 我的应用流程: 用户选择照片资产> (超过100+) 从资产加载图片> (显示图像尺寸) 设置imageView图像或将CIFilter添加到图像和幻灯片
问题: 当我从CGImage创建CIImage对象时,内存增长如此之快,如果图像数超过100,则应用程序崩溃。 但是我删除创建代码很奇怪,应用程序运行正常。
有人能帮助我吗?
更多代码:
- (void)loadDisplayImagesWithCompletion:(void (^)(NSArray *images))completion {
dispatch_async(dispatch_queue_create("PhotosEditViewController_loadImageQueue", nil), ^{
__block NSMutableArray *images = [NSMutableArray array];
__block int handleCount = 0;
__weak PhotosEditViewController *weakSelf = self;
for (PHAsset *asset in self.photoAssets) {
[KPPhotoManager requestImageForAsset:asset targetSize:self.contentView.frame.size completeBlock:^(UIImage *image) {
[images addObject:image];
@autoreleasepool {
CIImage *ciImage = [CIImage imageWithCGImage:[image CGImage]];//memory growing up
}
}];
}
});
}
// KPPhotoManager
+ (void)requestImageForAsset:(PHAsset*)asset targetSize:(CGSize)size completeBlock:(void (^)(UIImage *image))completeBlock
{
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeAspectFill options:[self createImageRequestOptions] resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
completeBlock(result);
}];
}
答案 0 :(得分:0)
我创建了一个复制代码的新项目。我将调用次数增加到10000并且检查内存看起来都很好。它确实跳了一下,但没有膨胀。
我还尝试使用以下方式强制图像加载:
for (int i=0; i<10000; i++) {
@autoreleasepool {
UIImage *image = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"image2.png"]];
[self createFilterImageWithImage:image];
}
}
它仍然不会使记忆膨胀。
您是如何检查内存泄漏的?你在看内存消耗吗?您的项目或文件中是否有任何细节,例如禁用ARC?