我想構建一個很好的函數來訪問圖像的網絡,如果它們在網上找到,我將它們存儲在我製作的緩存系統中。 如果圖像已經存儲在緩存中,我將它返回。 該功能被稱爲getImageFromCache
,並返回一個圖像,如果它在緩存中,否則它會去網絡並獲取。UIImages NSURLs和線程
的代碼可能是這樣的:
UIImageView* backgroundTiles = [[UIImageView alloc] initWithImage[self getImageFromCache:@"http://www.example.com/1.jpg"]];
現在,我在繼續使用,因爲由於網絡流量大的延遲的線程。所以我希望圖像在我得到網絡結果之前顯示一個臨時圖像。
我想知道的是,如何跟蹤順序訪問的很多圖像,通過此函數(getImageFromCache)將其添加到UIImageView
。
東西就不會在那裏工作:
-(UIImage*)getImageFromCache:(NSString*)forURL{
__block NSError* error = nil;
__block NSData *imageData;
__block UIImage* tmpImage;
if(forURL==nil) return nil;
if(![self.imagesCache objectForKey:forURL])
{
// Setting a temporary image until we start getting results
tmpImage = [UIImage imageNamed:@"noimage.png"];
NSURL *imageURL = [NSURL URLWithString:forURL];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
imageData = [NSData dataWithContentsOfURL:imageURL options:NSDataReadingUncached error:&error];
if(imageData)
{
NSLog(@"Thread fetching image URL:%@",imageURL);
dispatch_async(dispatch_get_main_queue(), ^{
tmpImage = [UIImage imageWithData:imageData];
if(tmpImage)
{
[imagesCache setObject:tmpImage forKey:forURL];
}
else
// Couldn't build an image of this data, probably bad URL
[imagesCache setObject:[UIImage imageNamed:@"imageNotFound.png"] forKey:forURL];
});
}
else
// Couldn't build an image of this data, probably bad URL
[imagesCache setObject:[UIImage imageNamed:@"imageNotFound.png"] forKey:forURL];
});
}
else
return [imagesCache objectForKey:forURL];
return tmpImage;
}
什麼是實際問題? – matt 2013-05-06 17:28:42
我不知道如何管理圖像一旦他們從網絡上返回 – Ted 2013-05-06 18:03:34
您的代碼顯示您將圖像放在字典中。這是管理他們。我再次問,問題是什麼? – matt 2013-05-06 21:13:33