이미지를 네트워크에 액세스하는 멋진 기능을 구축하려고합니다. 웹에서 찾았다면이를 캐시 시스템에 저장합니다. 이미지가 이미 캐시에 저장된 경우이를 반환합니다. 이 함수는 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
웹에서 돌아온 이미지를 관리하는 방법을 모르겠습니다. – Ted
코드는 이미지를 사전에 표시하는 것을 보여줍니다. 그것은 그들을 관리하고 있습니다. 다시 나는 묻는다, 무엇이 문제인가? – matt