2013-08-28 50 views
1

我不知道uicollection觀點總是調用該方法(UICollectionViewCell *)的CollectionView:(UICollectionView *)的CollectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath如何優化從uicollectionview的URL加載圖像?

當您移動的細胞,使我的程序則總是調用從url加載圖片。讓它變慢。

+0

異步加載圖像並緩存它們。 –

+1

使用SDWebImageCache相同。如果圖像將被下載,那麼下次它將從緩存中獲取它,而不是每次打電話給服務器 –

+0

感謝Gautam!真棒! –

回答

1

從蘋果公司的Documentation ...

– dequeueReusableCellWithReuseIdentifier:forIndexPath: 

調用此方法從數據源對象時要求提供的集合視圖新的細胞。此方法將取出現有單元格(如果有),或根據您之前註冊的類或nib文件創建新單元格。

重要:調用此方法之前的方法:你必須註冊使用的registerClass類或筆尖文件:forCellWithReuseIdentifier:或registerNib:forCellWithReuseIdentifier。

編輯:我假設你正在加載圖像,如果不是,那麼使用下面的代碼。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
dispatch_async(queue, ^{ 
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL: 
    [NSURL URLWithString:@"ur image url"]]]]; 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
    [[cell imageView] setImage:image]; 
    [cell setNeedsLayout]; 
    }); 
    }); 

編輯2:atomk的建議(下面的評論)是有道理的,所以我不會被張貼代碼here.In更換可以使用庫調用SDWebImage。你可以加載你想要的圖片並且根據代碼的作者不會多次下載相同的URL。

+0

@ atomk.thanks注意...我現在編輯答案... –

+0

感謝iOSCoder!這工作真的很棒。 –

+0

@atomk真的嗎?認爲GCD的要點是以這種方式抽象出線程創建。你有什麼進一步的閱讀? –