UIimage 内存占用问题

2017-03-08  本文已影响384人  changeWong

我们平时可能在写代码的时候,并没有在意UIimage对内存的占用问题。
最近我在做项目的时候,需要对多个图片进行压缩处理,发现处理后内存并没有马上得到释放。然后在网上找到了一种方法,就是写在@autoreleasepool里面。代码如下:

[imageArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSDictionary *dic = obj;
        @autoreleasepool {
            
            NSString *fbigPath = [dic[@"fbigpath"] lastPathComponent];
            NSString * fsmallPath = [dic[@"fsmallpath"] lastPathComponent];
            
            UIImage *bigImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:dic[@"fbigpath"]]]];
            [[FileManager shareFileManager] writeBig:UIImageJPEGRepresentation(bigImage, 1.0) andWithPath:fbigPath];
            
            //压缩大图
            NSData * tempData = UIImageJPEGRepresentation(bigImage, 1.0);
            UIImage * smallimage;
            UIImage * ComImage;
            
            if ((float)([tempData length] / 1000.0 / 1000.0) >= 0.05) {
                
                smallimage = [self imageCompressForWidth:bigImage targetWidth:300];
                ComImage = smallimage;
                NSData * reduceData = UIImageJPEGRepresentation(smallimage, 0.35);
                
                while ((float)([reduceData length] / 1000.0 / 1000.0) >= 0.05) {
                    
                    NSData * data = [NSData dataWithData:reduceData];
                    ComImage = [UIImage imageWithData:data];
                    [ComImage imageByResizeToSize:CGSizeMake(ComImage.size.width * 0.6, ComImage.size.height * 0.6)];
                    reduceData = UIImageJPEGRepresentation(ComImage, 1.0);
                }
            } else {
                ComImage = bigImage;
            }

            [[FileManager shareFileManager] writeSmall:UIImageJPEGRepresentation(ComImage, 1.0) andWithPath:fsmallPath];
            
            ComImage = nil;
            smallimage = nil;
            bigImage = nil;
        }
    }];

在for循环里面,每次对image处理都放在autoreleasepool里面,然后在处理完后系统就会马上释放掉内存。

上一篇下一篇

猜你喜欢

热点阅读