UIImageJPEGRepresentation内存暴涨

使用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内存暴涨)