获取图像需要很长时间(Objective-C)

时间:2015-06-28 12:22:25

标签: objective-c image core-data fetch photo

我是初学者ios开发者,我想创建一个相册应用。我从互联网上找到一些代码并尝试从那里学习。在应用程序中,当我点击一个专辑时,需要花费很多时间来加载专辑的图像集合视图。要获取图像,我的代码在ViewWillAppear中。你能帮助我优化这段代码以获得更好的性能吗?如果图像超过10-15张,则加载时间过长。如果我的英语不好,请提前致谢并抱歉。

-(void)viewWillAppear:(BOOL)animated
{
    // Call to the super classes implementation of viewWillAppear
    [super viewWillAppear:YES];
    /* The Photos are stored in Core Data as an NSSet. */
    NSSet *unorderedPhotos = self.album.photos;
    /* To organize them we use a NSSort descriptor to arrange the photos by date. */
    NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
    NSArray *sortedPhotos = [unorderedPhotos sortedArrayUsingDescriptors:@[dateDescriptor]];
    self.photos = [sortedPhotos mutableCopy];

    /* Now that the photos are arranged we reload our CollectionView. */
    [self.collectionView reloadData];

}

1 个答案:

答案 0 :(得分:1)

图像作为原始数据块存储在Core Data中。数据与将UIImage转换为NSData时的数据相同。这可能会很快导致数据库中存储大量数据,这些数据必须被提取和反序列化,因此它可能会很慢。

就速度而言,这里有一些你可能想要思考和阅读的内容:

1)File formats:核心数据是您的最佳选择吗?核心数据是一个非常有用的工具,特别是对于大量的重复数据,但它并不适用于像图像这样的大块数据。考虑以不同的格式保存图像(png,jpeg,tiff,e.t.c)以获得更好的性能。

2)Lazy loading:你真的需要一次加载你的所有图像吗?如果您可以一次加载5个,那么您可以一次性显着减少需要检索的数据量。例如。想象一下用户正在滚动1000行的表,该表不会一次性加载1000行,它将加载,足以为用户提供良好的体验,而不是更多。

3)Concurrency:这是一个非常有用的工具,每个开发人员都应该知道,尽管在使用它时必须小心,因为它会导致比解决的问题更多的问题。但是,整个想法是在后台线程上分派任务,这会导致更快的处理时间。我不会在这里详细介绍,因为这是一个很大的话题,但值得了解。 (如果您阅读了该链接,请查看调度队列。)

这是一个非常普遍的问题,所以你有一个很普遍的答案,但我希望你能找到你想要的东西。快乐的编码!