Я пытаюсь загрузить и сохранить некоторые изображения (преобразованные из строки base64 в UIImage) на устройство и продолжаю получать предупреждение о памяти.
ontracFullScreenImageViewController *etrackDiagrams = ((ontracFullScreenImageViewController*)[viewControllerDictionary objectForKey:@"E-track Diagrams"]);
NSMutableSet *etrackSet = [[NSMutableSet alloc] init];
for (UIImage *image in etrackDiagrams.imageArray) {
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
//convert the image to NSData and store it in the documents directory
NSData *pngData = UIImagePNGRepresentation(image);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString * timeInMS = [NSString stringWithFormat:@"%lld", [@(floor([[NSDate date] timeIntervalSince1970] * 1000)) longLongValue]];
NSString *filePath = [documentsPath stringByAppendingPathComponent:[ NSString stringWithFormat:@"%@_%@_etrack_diagram_%i_%i_image.png", delegate.userName, timeInMS, self.dataObject.dataPack.pack_id, [etrackDiagrams.imageViewArray indexOfObject:image]]]; //Add the file name
[pngData writeToFile:filePath atomically:YES];
NSLog(@"filepath %@", filePath);
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer isEqualToString:@"5.0.1"]) {
[[NSURL URLWithString:filePath] setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error];
}
//Add the file Path to ImageLinks
[etrackDiagrams.imageLinks addObject:filePath];
//save the image location in Core Data
EtrackDiagram *etrackDiagram = [NSEntityDescription
insertNewObjectForEntityForName:@"EtrackDiagram"
inManagedObjectContext:context];
etrackDiagram.locationString = filePath;
etrackDiagram.dataObject = dataObject;
[etrackSet addObject:etrackDiagram];
[dataObject addEtrackDiagramsObject:etrackDiagram];
[localPool drain];
}
[dataObject addEtrackDiagrams: etrackSet];
Предупреждение о памяти появляется в NSData *pngData = UIImagePNGRepresentation(image);
, так как изображения довольно большие.
К сожалению, я не могу контролировать размер изображений, но мне нужен способ сохранить их на устройстве, чтобы позже использовать их в галерее.
Я пытался обернуть код @autoreleasepool
, но это не имело значения.
for (UIImage *image in etrackDiagrams.imageArray)
доказывает, что вы можете получить объекты UIImage из загруженных данных. Но затем вы можете получить объекты UIImage из загруженных данных после того, как эти данные будут сохранены на диск. Вам не нужно выполнять какое-то промежуточное преобразование в PNG, чтобы пересохранить эти данные. Он уже готов к рок-н-роллу. 11.10.2016