2014-08-29 1 views
1

내 앱에는 이미지 아이콘이있는 버튼의 스크롤 목록이 있습니다. 나는 .png 아이콘 파일이 2KB 밖에 없지만 압축되지 않은 버전은 약 150kb이며 모든 버튼을 합한 총 장치 메모리가 너무 많음을 발견했습니다. 나는 이미지가 사용하고있는 메모리 양을 실현이미지로 UIButton을 사용하는 메모리

for (int i=0; i<buttonsCount; i++) { 
    UIImage *image = [UIImage imageNamed:@"Icon"]; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setImage:image forState:UIControlStateNormal]; 
} 

, 내가 외부에서 이미지 생성을 이동 :

는 원래 각 버튼은 개체의 인스턴스 내에서 생성, 그래서 코드는 기본적으로 다음과 같이 일 모든 오브젝트가 동일한 이미지를 사용하게하십시오. 이제 코드는 기본적으로 다음과 같이 작동합니다.

UIImage *image = [UIImage imageNamed:@"Icon"]; 

for (int i=0; i<buttonsCount; i++) { 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setImage:image forState:UIControlStateNormal]; 
} 

그러나 메모리 사용량은 같습니다. 분명히 UIButton은 이미지 데이터의 복사본을 만들고 있습니다. 많은 버튼간에 이미지 데이터를 "공유"할 수있는 방법이 있습니까?

할당 도구를 사용하여 인스트루먼트에서 앱을 실행하면 "VM : CG 래스터 데이터"가 너무 커지는 항목입니다.

내가 생각할 수있는 유일한 대안은 스크롤하는 동안 필요에 따라 버튼을로드하거나 언로드하는 것입니다. 그러나 스크롤하는 동안 성능이 저하 될까봐 걱정됩니다. 또는 단순히 이미지의 픽셀 크기를 줄이는 것입니다.

답변

0

UITableView와 유사한 방법을 사용할 수 있습니다 (또는 UITableView를 직접 사용할 수도 있음). 화면에있는 항목에 대한보기 (셀) 만 생성 한 다음 화면 밖으로 이동할 때 이러한 셀을 재활용합니다. 즉, 이러한 뷰는 항상 재생성되지 않고 화면에서 이동하기 바로 전에 올바른 데이터로 업데이트됩니다.

관련 문제