Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone tableview具有大量图像_Iphone_Performance_Image_Cell_Tableview - Fatal编程技术网

iphone tableview具有大量图像

iphone tableview具有大量图像,iphone,performance,image,cell,tableview,Iphone,Performance,Image,Cell,Tableview,我有一个UITableView,它在单元格中显示了很多图像,我对滚动性能不满意。我的UITableView类似于iphone上的照片应用程序。有人知道为什么iphone的foto应用程序滚动得如此之快,好像屏幕上什么都没有 还有谁有一些技巧/技巧来提高我的性能/滚动速度吗?通过对UITableViewCell进行子类化并直接绘制每个单元格的内容,已经报告了出色的滚动性能结果。有关更多详细信息和代码示例的链接,请参阅已接受的答案。这里的问题是内存,您一次加载的高分辨率图片太多,foto应用程序不使

我有一个
UITableView
,它在单元格中显示了很多图像,我对滚动性能不满意。我的
UITableView
类似于iphone上的照片应用程序。有人知道为什么iphone的foto应用程序滚动得如此之快,好像屏幕上什么都没有


还有谁有一些技巧/技巧来提高我的性能/滚动速度吗?

通过对UITableViewCell进行子类化并直接绘制每个单元格的内容,已经报告了出色的滚动性能结果。有关更多详细信息和代码示例的链接,请参阅已接受的答案。

这里的问题是内存,您一次加载的高分辨率图片太多,foto应用程序不使用tableview,它使用滚动视图,一次最多只加载3张图片,因此内存不是问题,如果你想做一些类似于foto应用程序的事情,请使用滚动视图,你应该预先设置图像,不要偷懒。当您滚动表格时,会调用该方法,如果您正在其中加载图像,则会看到它在滚动时请求单元格内容,从而在应用程序中造成延迟。试着把你的CellForRow放在索引路径上:类似这样的东西:

NSDate *date = [NSDate date];
... your cell loading code ...
NSLog( @"Elapsed time to generate cell %.2d", [date timeIntervalSinceNow] );
你会看到你花了多长时间来获得每个细胞

要解决这个问题,你可以尽可能地复杂——如果你有很多图像,你就必须越来越聪明。您可以进行分页加载,跟踪最后一个请求的单元格的NSIndexPath,并确定滚动是否向上或向下,然后使用滚动立即向前获取一些页面大小的图像(即,当前位置前5个图像),或者任何适合您的操作(利用人们必须将手指放回表格底部才能再次刷卡这一事实,因此表格元素的使用会暂停—您可以将页面大小设置为足以填满刷卡).不过,这可能还是不太好,因为你会一次承受所有的冲击,而不是每个细胞都承受不安的负荷

您可以快速将控制权返回到UI,并允许系统使用NSImage:imageNamed:,在主运行循环之外安排预取的图像页面,然后当请求单元格时,如果您获取的足够超前,则可以显示该单元格


但是,您需要痛苦地意识到内存问题。如果您发现这是一个问题,请使用,这将在内存不足的情况下清理图像缓存。根据缓存失效算法使用的策略,这些情况可能会导致“口吃”当你清除缓存并重新加载无效的预取时。

你链接到的博客中的讨论不适合这个问题-它讨论的是iphone中的合成性能,并建议你通过实现自己的绘图代码以使用完全不透明度来处理这个问题。这个问题可能不会受到影响问题是。通常,除非你有充分的理由,否则你不应该扩展单元格本身!最好是添加到contentView并设置背景视图,以便正确处理表格动画。我不必使用daniel建议的滚动视图?它们有区别吗?不-事实上daniels的评论有点奇怪,因为我的视图在照片应用程序中,它在屏幕上加载整个网格的照片,四幅宽。这要困难得多,但他们所做的是保留一个缩略图并使用它们。如果你快速滑动,它仍然不是完全平滑的,它会有点结巴。表格实际上更容易,因为它让你知道什么时候需要获得更多的图像。