获取图像需要很长时间(Objective-C)
It takes long time to fetch images (Objective-C)
我是初学者 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];
}
图像作为原始数据块存储在核心数据中。数据与将 UIImage
s 转换为 NSData
s 时的数据相同。这会很快导致大量数据存储在您的数据库中,这些数据必须被提取和反序列化,因此它可能很慢。
就速度而言,您可能需要考虑以下几点并继续阅读:
1) File formats:Core Data 是您的最佳选择吗? Core Data 是一个非常有用的工具,尤其是对于大量重复数据,但它不适用于图像等大块数据。考虑以不同格式(png、jpeg、tiff、e.t.c)保存图像以获得更好的性能。
2) Lazy loading:您真的需要一次加载所有图像吗?如果您可以加载,比如一次加载 5 个,那么您可以显着减少一次需要检索的数据量。例如。想象一个 table 用户正在滚动 1000 行,table 不会一次性加载 1000 行,它会加载,足以给用户一个良好的体验仅此而已。
3) Concurrency:这是一个非常有用的工具,每个开发人员都应该知道,尽管在使用它时必须小心,因为它可能导致的问题多于解决的问题。然而,整个想法是在后台线程上分派任务,从而加快处理时间。我不会在这里详细介绍,因为这是一个很大的话题,但很值得了解。 (如果您阅读 link,请查看 调度队列 。)
这是一个很笼统的问题,所以你的答案很笼统,但我希望你能找到你要找的东西。编码愉快!
我是初学者 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];
}
图像作为原始数据块存储在核心数据中。数据与将 UIImage
s 转换为 NSData
s 时的数据相同。这会很快导致大量数据存储在您的数据库中,这些数据必须被提取和反序列化,因此它可能很慢。
就速度而言,您可能需要考虑以下几点并继续阅读:
1) File formats:Core Data 是您的最佳选择吗? Core Data 是一个非常有用的工具,尤其是对于大量重复数据,但它不适用于图像等大块数据。考虑以不同格式(png、jpeg、tiff、e.t.c)保存图像以获得更好的性能。
2) Lazy loading:您真的需要一次加载所有图像吗?如果您可以加载,比如一次加载 5 个,那么您可以显着减少一次需要检索的数据量。例如。想象一个 table 用户正在滚动 1000 行,table 不会一次性加载 1000 行,它会加载,足以给用户一个良好的体验仅此而已。
3) Concurrency:这是一个非常有用的工具,每个开发人员都应该知道,尽管在使用它时必须小心,因为它可能导致的问题多于解决的问题。然而,整个想法是在后台线程上分派任务,从而加快处理时间。我不会在这里详细介绍,因为这是一个很大的话题,但很值得了解。 (如果您阅读 link,请查看 调度队列 。)
这是一个很笼统的问题,所以你的答案很笼统,但我希望你能找到你要找的东西。编码愉快!