使用UIImageJPEGRepresentation對(duì)圖片進(jìn)行壓縮上傳時(shí)發(fā)現(xiàn)內(nèi)存暴漲,且無法回收。根源是對(duì)象持有的問題,導(dǎo)致內(nèi)存無法釋放,即壓縮的圖片對(duì)象還在被原有的類或者對(duì)象所持有。在拍照,或者從相冊(cè)選擇圖片后。本地持久化,然后釋放原有Image或NSData對(duì)象的持有。上代碼,下面代碼是我自己封裝的UIImagePickerController,持有圖片的對(duì)象有屬性UIImage *originalImage及UIImageView *showImageView。
UIImage *imgimg = [weakSelf screenShotView:weakSelf.showImageView];
// 把裁剪好的圖片存儲(chǔ)到沙盒
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下面創(chuàng)建一個(gè)Image的文件夾的路徑
NSString *createPath=[NSString stringWithFormat:@"%@/Images_UIImageJPEGRepresentation",documentsDirectory];
//沒有這個(gè)文件夾的話就創(chuàng)建這個(gè)文件夾
if(![fileManage fileExistsAtPath:createPath]){
[fileManage createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];
NSLog(@"已創(chuàng)建文件夾");
}
//把數(shù)據(jù)以.png的形式存儲(chǔ)在沙盒中,路徑為可變路徑
NSString *filePath = [NSString stringWithFormat:@"%@/%@.png",createPath,@"UIImageJPEGRepresentation"];
[[NSFileManager defaultManager] createFileAtPath:filePath contents:imageData attributes:nil];
_originalImage = nil;
_showImageView.image = nil;