Я использую NSCoding для управления пользовательским объектом с несколькими различными полями, одно из которых - изображения. Я ориентируюсь только на iOS 5.0+ и перешел на ARC. У меня все работает, но я сосредоточен на производительности - я не видел подобного вопроса, поэтому вот оно:
Я преобразую UIImage в NSData и добавляю его в основной файл NSCoding (plist, если он имеет значение) для хранения на диске. Если имеется более одного изображения, имена изображений становятся последовательными (например, image1, image2, image3.). Затем я использую изображение как в UITableView (как уменьшенный эскиз), так и в подробном представлении. Отрицательной стороной этого является то, что plist имеет размер, что означает медленное начальное время загрузки, когда я его использую, потому что он загружает все NSData одновременно.
Каков наилучший способ устранить эту проблему и принудительно загрузить только одно изображение за раз?
Что я подумала:
Я записываю NSData на диск, добавляю массив в plist и добавляю только ссылку на имя файла каждого изображения в массив. Я полагаю, что тогда я буду ссылаться на имя файла изображения в указанной позиции, найти его на диске и использовать?
Любые мысли будут приветствоваться. Я больше застрял в концептуальной реализации, чем что-либо еще, и, как ни странно, это не часто обсуждаемая тема.
Спасибо,
РЕДАКТИРОВАТЬ:
Как указано ниже, вот пример взятия изображения и его преобразования в NSData:
UIImage *originalImage;
NSData *imageData = UIImagePNGRepresentation(originalImage);
//I save it all to the app's document directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//I am using the images in a tableView and thus found it easiest to append the row number to each image filename.
//'y' below is just an integer that corresponds to the number of items in the master array
NSString *fileName = [NSString stringWithFormat:@"image%d.png",y];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:fileName];
[imageData writeToFile:documentsDirectory atomically:YES];
// NSLog(@"The filename is %@", fileName);
//newObject is an instance of my NSCoding object
[newObject setImageName: fileName];