我创建了NSManagedObject* imagesArrayData
,它将字符串(路径)存储到文档目录中存储的图像中:
- (void)setImagesArray:(NSMutableArray *)imagesArray {
NSMutableArray* newImagesArray = [NSMutableArray new];
int i = 1;
for (UIImage* image in imagesArray) {
//generate path to createdFile
NSString* fileName = [NSString stringWithFormat:@"%@_%d", self.name, i];
NSString* filePath = [self documentsPathForFileName:fileName];
//save image to disk
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:filePath atomically:YES];
//add image path to CoreData
[newImagesArray addObject:filePath];
i++;
}
//set new value of imagesArray
imagesArrayData = [NSKeyedArchiver archivedDataWithRootObject:newImagesArray];
我现在没有在头文件中显示pathsToImages,但属性imagesArray:
-(NSMutableArray*) imagesArray {
NSMutableArray* images = [NSMutableArray new];
NSArray* imagePaths = [NSKeyedUnarchiver unarchiveObjectWithData:imagesArrayData];
for (NSString* imagePath in imagePaths) {
UIImage *image = [[UIImage alloc] initWithContentsOfFile: imagePath];
[images addObject:image];
}
return images;
问题是,每当我想要到达[imagesArray objectatIndex:xxx]
时,都会调用imagesArray getter,并且重新创建完整数组需要时间。当尝试在图像之间快速切换时,UI会变慢。
克服这个问题的优雅方法是什么?也许创建另一个充满图像的数组并不时更新它?也许别的什么?请帮忙。
答案 0 :(得分:1)
你可以做的一件事是重构你的getter懒惰地加载数组。如果已经定义,只需返回它。如果没有,建立它:
-(NSMutableArray*) imagesArray
{
if (!_imagesArray)
{
NSMutableArray* _imagesArray = [NSMutableArray new];
NSArray* imagePaths =
[NSKeyedUnarchiver unarchiveObjectWithData: imagesArrayData];
for (NSString* imagePath in imagePaths)
{
UIImage *image = [[UIImage alloc] initWithContentsOfFile: imagePath];
[_imagesArray addObject:image];
}
return _imagesArray;
}
我不确定你不时更新图像数组的意思。
如果您的图像名称数组发生变化,您将需要一些方法来响应这些变化。