我不知道uicollection觀點總是調用該方法(UICollectionViewCell *)的CollectionView:(UICollectionView *)的CollectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath如何優化從uicollectionview的URL加載圖像?
當您移動的細胞,使我的程序則總是調用從url加載圖片。讓它變慢。
我不知道uicollection觀點總是調用該方法(UICollectionViewCell *)的CollectionView:(UICollectionView *)的CollectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath如何優化從uicollectionview的URL加載圖像?
當您移動的細胞,使我的程序則總是調用從url加載圖片。讓它變慢。
從蘋果公司的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。
@ atomk.thanks注意...我現在編輯答案... –
感謝iOSCoder!這工作真的很棒。 –
@atomk真的嗎?認爲GCD的要點是以這種方式抽象出線程創建。你有什麼進一步的閱讀? –
使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
加載圖像,然後使用NSCache來防止反覆下載相同的圖像。在這裏尋找一個例子,你甚至可能想要包含這個AFNetworking庫並使用它: https://github.com/AFNetworking/AFNetworking/blob/master/AFNetworking/UIImageView%2BAFNetworking.m
感謝Atomkm,我確實使用了AFNetworking,但它對於我正在製作的一個簡單應用來說太大了。 –
您可以使用SDWebImage用於支持緩存的目的。您無需下載之前已獲取的圖像。
只要訪問https://github.com/rs/SDWebImage並使用它。
異步加載圖像並緩存它們。 –
使用SDWebImageCache相同。如果圖像將被下載,那麼下次它將從緩存中獲取它,而不是每次打電話給服務器 –
感謝Gautam!真棒! –