美文网首页
UIImageJPEGRepresentation内存暴涨

UIImageJPEGRepresentation内存暴涨

作者: li_bai | 来源:发表于2019-12-26 18:37 被阅读0次

    使用UIImageJPEGRepresentation对图片进行压缩上传时发现内存暴涨,且无法回收。根源是对象持有的问题,导致内存无法释放,即压缩的图片对象还在被原有的类或者对象所持有。在拍照,或者从相册选择图片后。本地持久化,然后释放原有Image或NSData对象的持有。上代码,下面代码是我自己封装的UIImagePickerController,持有图片的对象有属性UIImage *originalImage及UIImageView *showImageView。

                UIImage *imgimg = [weakSelf screenShotView:weakSelf.showImageView];
                // 把裁剪好的图片存储到沙盒
                NSData *imageData = UIImageJPEGRepresentation([UIImage fixOrientation:imgimg], 0.000000000000000001);
                NSFileManager *fileManage=[NSFileManager defaultManager];
                NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                NSString *documentsDirectory=[paths objectAtIndex:0];//Documents目录
                //在Documents下面创建一个Image的文件夹的路径
                NSString *createPath=[NSString stringWithFormat:@"%@/Images_UIImageJPEGRepresentation",documentsDirectory];
                //没有这个文件夹的话就创建这个文件夹
                if(![fileManage fileExistsAtPath:createPath]){
                    [fileManage createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];
                    NSLog(@"已创建文件夹");
                }
                //把数据以.png的形式存储在沙盒中,路径为可变路径
                NSString *filePath = [NSString stringWithFormat:@"%@/%@.png",createPath,@"UIImageJPEGRepresentation"];
                [[NSFileManager defaultManager] createFileAtPath:filePath contents:imageData attributes:nil];
                _originalImage = nil;
                _showImageView.image = nil;
    

    相关文章

      网友评论

          本文标题:UIImageJPEGRepresentation内存暴涨

          本文链接:https://www.haomeiwen.com/subject/dryloctx.html