0

我会试着解释一下我自己,我有ContactsViewController一个带有联系人列表的表格视图(模型是一个Contact对象数组),每个单元格都显示一个联系人的图像。

目前我填充单元格的UIImageView方法是:
1. 我覆盖Contact图像属性 getter -

- (UIImage *)contactImage
 {
     if (!_contactImage) {
        _contactImage = [[UIImage imageNamed:@"placeHolder.png"] retain];
       [self asyncDownloadContactImageFromServer];
     }
     return _contactImage;
 }
  1. 然后,当我完成下载图像时,我将其设置为contactImage属性并发布ContactUpdatedImageNotification.

  2. 然后我ContactsViewController收到此通知并重新加载此联系人的单元格,这会将下载的图像设置为单元格的 imageView。

这样做的结果是在用户滚动表格视图时很好地异步获取图像而不会阻塞 UI。
但是有一些小问题困扰着我,当用户滚动表格视图并显示新单元格时,新单元格的图像会按预期下载,但单元格的 imageView 不会更新为新下载的图像,直到用户拿起他的手指。
我想我需要在另一个线程中做一些事情才能产生这种效果,但我不知道怎么做?

4

2 回答 2

1

由于代码在默认运行循环中执行,直到用户停止滚动,图像才会更新,该运行循环会延迟到滚动完成。这个另一个问题涉及runloops之间的区别,NSDefaultRunLoopMode vs NSRunLoopCommonModes,它精确地建议不要在滚动时更新图像,因为如果你不小心,这可能会在滚动本身中引入抖动。

此外,既然您知道这些 runloop 模式的存在,您将能够在 xcode 文档或 Internet 中找到有关它们的更多信息。

于 2012-04-15T12:47:11.920 回答
0

嘿 Eyal 访问以下网址...您将获得答案以及示例代码...

具有不同单元格和不同图像的表格视图

希望对你有帮助...

于 2012-04-15T11:13:54.503 回答