使用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;
网友评论