Iphone uitableviewcell中UIImageView的setImage在iOS中滚动滞后

Iphone uitableviewcell中UIImageView的setImage在iOS中滚动滞后,iphone,uiimageview,background-process,lag,egoimageview,Iphone,Uiimageview,Background Process,Lag,Egoimageview,我有一个从互联网下载的照片的图库视图,所以我使用了诺梅戈的EGOImageView。我注意到,当图像在缓存中后向下滚动tableview时,滚动会延迟。我立即发现,当使用return[UIImage-imageWithContentsOfFile:cachePathForKey(key)]从硬盘检索图像时它在主线程上工作,因此我将该操作添加到NSOperationQueue。这将延迟减少了一半,但滚动仍不顺畅。看完代码后,我注意到在success方法中 - (void)imageLoaderDi

我有一个从互联网下载的照片的图库视图,所以我使用了诺梅戈的EGOImageView。我注意到,当图像在缓存中后向下滚动tableview时,滚动会延迟。我立即发现,当使用
return[UIImage-imageWithContentsOfFile:cachePathForKey(key)]从硬盘检索图像时它在主线程上工作,因此我将该操作添加到NSOperationQueue。这将延迟减少了一半,但滚动仍不顺畅。看完代码后,我注意到在success方法中

- (void)imageLoaderDidLoad:(NSNotification*)notification {
    if(![[[notification userInfo] objectForKey:@"imageURL"] isEqual:self.imageURL]) return;

    UIImage* anImage = [[notification userInfo] objectForKey:@"image"];
    self.image = anImage;
    [self setNeedsDisplay];

    if([self.delegate respondsToSelector:@selector(imageViewLoadedImage:)]) {
        [self.delegate imageViewLoadedImage:self];
    }
}
注释掉
self.image=anImage完全消除了延迟(但显然我没有得到图像)。据我所知,如果我想改变UI,它必须在主线程中完成。有没有一种方法可以设置EGOImageView的图像,而不延迟滚动

注意:JPG大约为50kB

谢谢

  • 子类uitableViewCell并在drawContentView中执行您自己的Drawing
  • 在背景线程中调整图像大小,然后在单元格中显示它们
  • 注:如果在GitHub上找到的代码对您来说不够好,请尝试编写适合您的问题的代码

  • 子类uitableViewCell并在drawContentView中执行您自己的Drawing
  • 在背景线程中调整图像大小,然后在单元格中显示它们

  • 注:如果在git hub上找到的代码对您来说不够好,请尝试编写适合您问题的代码。

    据我所知,启动异步磁盘查询所需的所有步骤在主线程上都需要几毫秒的时间,这足够让滚动看起来像结巴一样,因此,我决定完全删除大图像的硬盘缓存,而是创建一个NSMutableDictionary,它将UIImage作为对象,并将NSURL.absoluteString作为键。这可以无缝地工作,但显然有占用内存的缺点。我检查了一些照片共享应用程序的内存使用情况,我已经能够使该应用程序的内存使用量超过100MB,所以似乎其他人都在这样做。

    据我所知,启动异步磁盘查询所需的所有步骤在主线程上都需要几毫秒,这就足够让滚动看起来像是断断续续了,所以我决定完全删除大图像的硬盘缓存,而是创建一个NSMutableDictionary,将UIImage作为对象,并将NSURL.absoluteString作为键。这可以无缝地工作,但显然有占用内存的缺点。我检查了一些照片共享应用程序的内存使用情况,我已经能够将该应用程序的内存使用率提高到100 MB以上,因此似乎其他人都在这样做。

    我想图像正在调整大小以适应self.image frame,因此会出现延迟。是这样吗?你以前在背景中尝试过调整大小吗?@Gabriel我没有!我根本没有考虑过。我要试试看@AndrewPark你有没有发现如何优化这个?我想图像正在调整大小以适应self.image frame,因此会出现延迟。是这样吗?你以前在背景中尝试过调整大小吗?@Gabriel我没有!我根本没有考虑过。我要试试看@AndrewPark你有没有发现如何优化它?