2012-02-06 54 views
2

我有一張從互聯網上下載的照片庫,因此我使用了Enormego的EGOImageView。我注意到,當圖像在緩存中後,當我滾動我的tableview時,滾動會滯後。我立即發現,當從return [UIImage imageWithContentsOfFile:cachePathForKey(key)];從硬盤中檢索圖像時,它正在處理主線程,所以我將操作添加到了NSOperationQueue。這減少了一半的滯後,但滾動仍然結結巴巴。通過代碼去後,我注意到,在成功的方法uImageView中的UIImageView的setImage在iOS中滾動延遲

- (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左右

感謝

+1

我想圖像正在調整大小,以適應self.image框架,所以滯後。是這樣嗎?您是否嘗試過在後臺調整大小? – Gabriel 2012-02-06 07:23:18

+0

@Gabriel我沒有!我根本沒有考慮過。我會嘗試一下! – 2012-02-06 07:31:41

+0

@AndrewPark你有沒有發現如何優化這個? – bogardon 2012-02-10 01:50:54

回答

0

據我所知,啓動一個異步磁盤查詢所需的所有步驟在主線程上需要幾毫秒,並且這足以讓滾動看起來像斷斷續續,所以我決定徹底刪除硬盤緩存對於大圖像,而是創建一個NSMutableDictionary,它將UIImage保存爲對象,並將NSURL.absoluteString作爲關鍵字。這工作無縫,但顯然有一個記憶豬的缺點。我檢查了一些照片共享應用程序的內存使用情況,我已經能夠將應用程序的內存使用量超過100MB,所以似乎其他人都在這樣做。

0
  1. 子類的UITableViewCell並做drawContentView自己drowing。
  2. 在後臺線程中調整圖像大小,然後將其顯示在單元格中。

P.S:如果在git集線器上找到的代碼對您來說不夠好,請嘗試編寫適合您問題的自己的代碼。