2011-11-15 3 views
1

내 앱이 스크린 샷을 찍습니다. 스냅 샷을 순환 할 수있는 스크롤보기가있는 기본 화면이 있습니다. 문제는 스냅 샷이 많을수록 뷰가 더 느리게 실행된다는 것입니다. 일들이 심각하게 뒤떨어지기 전에 나는 scrollview에서 약 15 스냅 샷을 얻을 수 있습니다. 내가 보여주는 이미지는 실제 스크린 샷의 1/3 크기입니다. 각 스크린 샷은 scrollview의 UIImageView입니다. 성능 향상에 대한 의견이 있으십니까?iOS 이미지 성능 향상 제안보기

+0

한 번에 몇 개의 이미지를 표시해야합니까? 또한 "각 스크린 샷은 scrollview에서 UIImageView입니다."각 UIImageView가 단일 스크롤 뷰 안에 있거나 각 이미지 뷰가 자체 스크롤 뷰 내에 중첩되어 있음을 의미합니까? 그런 다음 단일 외부 스크롤보기에 배치됩니까? –

답변

5

당신이 할 수있는 최선의 방법은 게으른 로딩을하는 것입니다. 해당 시점에 표시되는 이미지 만 해당 뷰에로드하십시오. 일단 스크롤하면 이전 이미지가 해제되고 새 이미지가로드됩니다. 이미지를로드 할

두 가지 방법 :

[UIImage imageNamed:fullFileName] // caches the image 

나 : 마지막으로

NSString *fileLocation = [[NSBundle mainBundle] pathForResource:fileName ofType:extension]; 
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation]; 
[UIImage imageWithData:imageData]; 

또는 :

[UIImage imageWithContentsOfFile:path] // does not cache the image 

솔루션이 최고 당신이 함께 무슨 일을하는지에 따라 달라집니다 영상. imageNamed: 메서드는 이미지를 캐시하지만 대부분의 경우 메모리 사용에 도움이됩니다. 예를 들어 이미지를 10 번로드하여 표보기에서 일부 텍스트와 함께 표시하면 UIImage은 10 개의 개별 객체를 할당하는 대신 해당 이미지의 단일 표현만을 메모리에 유지합니다. 반면에 이미지가 매우 크고 다시 사용하지 않는 경우 데이터 객체의 이미지를로드하여 완료되면 메모리에서 이미지를 제거 할 수 있습니다.

거대한 이미지가 없으면 게으른로드를 사용하는 한 캐싱에 대해 걱정할 필요가 없습니다. 문제가 보이지 않는 한, 메모리 개선을 무시할 정도로 적은 코드 행을 선택합니다.