2009-09-28 2 views
0

UIImage은 캐쉬에서 이미지를 제거합니까? imageNamed:에서 가져온 이미지에 대한 포인터를 유지하고 언제든지 사용할 수 있습니까? 아니면 항상 imageNamed:으로 전화해야합니까?UIImage의 캐싱 동작

답변

2

imageNamed:에서 반환 된 UIImage 개체는 다른 메모리 개체와 마찬가지로 처리됩니다. 메서드 호출 사이에 개체에 대한 참조를 유지하려면 참조 횟수를 감소 시키려면 retainrelease을 입력해야합니다.

메모리 부족 상황에서

는, 이미지 데이터 가 시스템에 까지 사용 가능한 메모리에있는 UIImage 객체에서 제거 될 수있다

UIImage * cachedImage; 

-(void) getTheImage { 
    UIImage * cachedImage = [[UImage imageNamed:@"MyImage.png"] retain]; 
    //Do something with the image... 
} 
//In some other method or dealloc 
[cachedImage release]; 

는 또한, UIImage class reference 말한다 있습니다. 이 제거 동작은 내부에서 UIImage 개체가 저장하고 개체가 아닌 이미지 데이터에만 영향을줍니다. 데이터가 제거 된 이미지를 그리면 이미지 개체가 원래 파일에서 데이터를 자동으로 다시로드합니다. 그러나이 추가로드 단계에서는 의 성능 저하가 발생할 수 있습니다.

0

UIImage는 데이터 자체를 캐시합니다. 포인터를 잡고 그냥 지나쳐서는 안됩니다. 메모리 경고가 있고 해당 객체에 대한 강력한 참조가 없으면 UIImage는 캐시 된 데이터를 제거하므로 안전하지 않을 수 있습니다. 매번 [UIImage imageNamed :]로 전화하십시오. 그것은 빠르며 ref를 메모리에서 이미지로 반환합니다. 이미지가 더 이상 메모리에 없다면 이미지를 다시로드하고 해당 심판을 전달합니다

관련 문제