iOS - 캐시 [SDImageCache] Image에 대한 질문

1558 단어
최근에 한 항목에 이러한 요구가 있다. 한 페이지에서 UIImageView로 그림을 끊임없이 리셋하면 그림이 반복될 수 있다.그림은 서버에서 다운로드한 데이터 흐름으로 데이터가 UIimage 시스템으로 이동하는 방법:
UIImage *image = [UIImage imageWithData:data];

이 방법은 좋지 않다. SDWebImage를 사용한 사람들은 왜 안 좋은지 알 수 있다. 그림은 서버에서 다운로드할 수 있고 그림이 중복될 수 있으니 SDWebImage로 캐시를 한다. 다음 요청은 그림의 유일한 표시로 로컬에서 먼저 가져올 수 있다. 만약에 있으면 다시 요청하지 않고 바로 돌아오면 된다. 다음은 그림 다운로드에 성공한 후에 돌아오는responseObject 데이터 흐름이다.
UIImage *responseImage = [UIImage sd_imageWithData:responseObject];
[[SDImageCache sharedImageCache] storeImage:responseImage forKey:
@"imageKey- " completion:nil];

캐시가 완료되면 UIImageView의 이미지에 responseImage 값을 부여합니다.
imageView.image = responseImage;

그리고 테스트를 시작했습니다. 이어서 문제를 발견했습니다. 그림 전환을 요청할 때 [그림이 중복되지 않음] 실행 메모리가 계속 증가했습니다. 제가 이미지 뷰를 사용할 때.image = responseImage; 이 줄의 주석을 지운 후 메모리가 모두 정상이다.요청한responseImage를 이미지뷰에 직접 할당하면 이 메모리 폭등 문제가 발생하는 것을 발견했습니다. 이어서 다음과 같은 수정을 했습니다.responseImage를 가져와 캐시를 로컬처럼 한 다음에SDImageCache에서 캐시된 새로운 UIIImage:imageResponseCache를 꺼내서 이미지ResponseCache를 이미지뷰에 할당합니다.
UIImage *responseImage = [UIImage sd_imageWithData:responseObject];
[[SDImageCache sharedImageCache] storeImage:responseImage forKey:@"imageKey- " completion:nil]; 
UIImage
*imageResponseCache = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:@"imageKey- "];
imageView.image =imageResponseCache;

상술한 실현을 통해 메모리는 모두 정상이다.

좋은 웹페이지 즐겨찾기