2010-07-08 37 views
0

我有一个tableView与其中的一些大图像。我正在努力改善非常生涩的滚动性能。如果我使用ImageNamed加载图像,开始时滚动会变得不稳定,但在查看图像后,滚动变得平滑。我知道ImageNamed将图像添加到系统缓存中,所以我的问题是:是否可以在查看图像之前将图像预加载到系统缓存中?如何将图像加载到iphone系统缓存中?

我已通过添加以下代码到我的viewDidLoad方法尝试:

for (int i = 0; i < appDelegate.detailSectionsDelegateDict.count; i++) { 
     NSString *imageString = [NSString stringWithFormat:@"%@",[[appDelegate.detailSectionsDelegateDict objectAtIndex:i] objectForKey:@"MainTrackImage"]]; 
     NSString *bundlePath = [[NSBundle mainBundle] bundlePath]; 
     UIImage* theImage; 
     theImage = [UIImage imageNamed:imageString]; 
     [imageCacheArray insertObject:theImage atIndex:i]; 
} 

我再画从imageCacheArray正确的图像在我的cellForRowAtIndexPath方法。但结果仍然是滚动。

谢谢!

回答

3

获得带有图像(尤其是大图)的表视图以平滑滚动并不像您想象的那样微不足道。使用[UIImage imageNamed:]加载一堆图像会很快导致跳板在开始超出内存容量时终止您的应用。看看核心动画session videos from this year's WWDC,特别是会话425,“实践中的核心动画,第2部分”。它们涵盖了这个确切的主题,它做得非常好。如果您使用开发者帐户登录,还可以获取相关的源代码。

+0

我正在下载视频。谢谢你的提示。请注意,我也尝试使用imageWithContentsOfFile和imageWithData,唯一明显的区别是滚动总是不平滑,而不是一旦图像被查看一次就平滑。 – Jonah 2010-07-08 21:36:39

+0

使用这些方法加载图像时,它将阻止用户界面并且不缓存。你必须自己做缓存。在我推荐的同一会话视频中,他们介绍了如何在单独的线程中加载图像 - 大约需要36分钟。 – 2010-07-08 21:53:51

+0

我遵循示例代码中的代码的问题是我无法获取它在加载之前绘制所有单元格。在他们的代码中,他们使用自定义的viewController来绘制所有图像(不管是否被查看)。所以,基本上所发生的一切就是当单元被拖入视图时,它正在被懒惰地加载。有关如何解决这个问题的任何建议?我试图创建一个tableViewCells数组与正确的imageViews表加载时,然后从cellForRowAtIndexPath中的数组绘制,但性能是非常糟糕的。谢谢您的帮助! – Jonah 2010-07-21 21:55:30