我正在开发一个从照片库导入照片的应用程序。导入照片时会占用大量内存,导入 160 张照片后会崩溃。
我不知道为什么会这样。任何帮助将非常感激。
这是我的代码
- (void)agImagePickerController:(AGImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info{
[pickerView dismissViewControllerAnimated:YES completion:nil];
[self.navigationItem setHidesBackButton:YES];
[self.navigationItem.rightBarButtonItem setEnabled:NO];
MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText=@"Importing Your Photo(s)";
// USING GRAND CENTRAL DISPATCH
firstQueue=dispatch_queue_create("com.import.photos", nil);
dispatch_async(firstQueue, ^{
[self beingBackgroundUpdateTask];
// Open connection
//[albumObject openDB];
// Start the loop from here ******************************************************
int j=0;
for(j=0;j<info.count;j++){
// update the hud label
hud.labelText=[[NSString alloc] initWithFormat:@"Importing %i of %i",j+1, [info count]];
// Create new image from returned array
ALAssetRepresentation *rep = [[info objectAtIndex: j] defaultRepresentation];
UIImage * image = [UIImage imageWithCGImage:[rep fullScreenImage]];
//rep=nil;
// resize the image for the thumbnail and save it in new image
UIImage *newImage=[image resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:CGSizeMake(75, 75) interpolationQuality:kCGInterpolationDefault];
NSDate *date = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"DD_MM_YY_HH_mm_ss"];
NSString *dateString = [dateFormat stringFromDate:date];
int random=rand();
// create new file names
NSString *fileName=[[NSString alloc] initWithFormat:@"%d%@",random,dateString];
NSString *s_fileName=[[NSString alloc] initWithFormat:@"small_%d%@",random,dateString];
// where to save this image
NSString *imagePath=[self.documentsDirectory stringByAppendingPathComponent:fileName];
NSString *s_imagePath=[self.documentsDirectory stringByAppendingPathComponent:s_fileName];
NSLog(@"type: %@",[rep.url pathExtension]);
if ([[rep.url pathExtension] isEqualToString:@"JPG"]) {
// its jpg
NSData *rawImage=UIImageJPEGRepresentation(image, 1.0);
NSData *thumb=UIImageJPEGRepresentation(newImage, 1.0);
image=nil;
newImage=nil;
date=nil;
dateFormat=nil;
dateString=nil;
random=nil;
// Create the images
[rawImage writeToFile:imagePath atomically:YES];
[thumb writeToFile:s_imagePath atomically:YES];
imagePath=nil;
s_imagePath=nil;
rawImage=nil;
thumb=nil;
}
if ([[rep.url pathExtension] isEqualToString:@"PNG"]) {
// its PNG
// save it in NSData to it can be saved in the directory
NSData *rawImage=UIImagePNGRepresentation(image);
NSData *thumb=UIImagePNGRepresentation(newImage);
image=nil;
newImage=nil;
date=nil;
dateFormat=nil;
dateString=nil;
random=nil;
// Create the images
[rawImage writeToFile:imagePath atomically:YES];
[thumb writeToFile:s_imagePath atomically:YES];
imagePath=nil;
s_imagePath=nil;
rawImage=nil;
thumb=nil;
}
// Now save it to database
[albumObject savePhoto:fileName toFID:PassedID toName:s_fileName albumName:singletonObj.currentAlbum photosName:singletonObj.currentPhotos];
[display_photos addObject:[MWPhoto photoWithFilePath:[self.documentsDirectory stringByAppendingPathComponent:fileName]]];
UIImage *img=[UIImage imageWithContentsOfFile:[self.documentsDirectory stringByAppendingPathComponent:s_fileName]];
[collection_photos addObject:img];
img=nil;
NSArray *pObj=[[NSArray alloc] initWithObjects:fileName,s_fileName, nil];
[photos addObject:pObj];
pObj=nil;
fileName=nil;
s_fileName=nil;
} j=nil;
// Update the album photo count to reflect the changes
[albumObject updateAlbumCount:PassedID photocount:[photos count] albumName:singletonObj.currentAlbum];
photos=[albumObject getPhotos:PassedID photosName:singletonObj.currentPhotos];
// End the loop here ***************************************************************
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
[MBProgressHUD hideHUDForView:self.view animated:YES];
[self.navigationItem setHidesBackButton:NO];
[self.navigationItem.rightBarButtonItem setEnabled:YES];
});
});
}