2012-02-19 2 views
2

짧은 설명UITableViewCells의 축소판 이미지에 대한 메모리 처리

현재 웹 사이트의 비디오 셀을 포함하고있는 UITableView가 있습니다. 또한 각 셀 (비디오를 나타냄)에는 특정 축소판 이미지가 있습니다. 이러한 이미지는 NSURLConnection을 사용하여 비동기 적으로 다운로드됩니다 (따라서 스레딩 걱정할 필요가 없습니다). 이러한 이미지 객체가 다운로드되면 UITableView에 속한 셀을 새로 고침하기 만하면됩니다.

내 문제 표준으로

이 각 통화 jQuery과 10 개의 새로운 비디오를 가져올 수 있습니다. 즉, 사용자가 UITableView의 아래쪽에있는 셀을 눌러 10 개의 새 비디오를 요청할 수 있습니다. 여기서 문제는 모든 축소판 이미지 (UITableView에서)에 대한 데이터가 무엇이든지간에 여전히 존재하기 때문에 전체적으로 많은 메모리 사용량이 빠르게 발생한다는 것입니다.

현재보기에없는 이미지 개체의 할당을 취소 할 수있는 효과적인 방법이 있습니까?

또한 UITableView는 모든 비디오 객체를 웹 사이트에서 가져온 배열에서 직접 모든 셀을 렌더링합니다. 즉, 사용자가 새 동영상을 몇 번이나 요청할 수 있는지에 대한 제한이 없으므로이 배열이 항상 커지고 있습니다. 항상 이러한 종류의 배열을 메모리에 유지하는 것이 맞습니까? 또는보기에서 나가서 나중에 다시 요청하는 항목을 삭제해야합니까? 당신이 대기하고있는 tableview 드 - 대기 세포의 표준 방법의 접근 방식을 사용하는 경우

는 당신이 정말로 단지 세포 조회수 (및 관련 축소판)의 소수를 사용한다, 미리

답변

0

VideoTableViewCell 클래스를 VideoTableViewCell 클래스로 UITableViewCell의 하위 클래스로 만들고 셀에 이미지 속성을 지정하면이 이미지는 셀이 화면에서 사라지 자마자 해제됩니다. 셀이 다시보기로 돌아 오자마자 셀과 이미지가 다시 만들어집니다.

동영상의 경우 다운로드 한 모든 비디오 파일을 문서 폴더에 저장하고 URL을 배열에 저장합니다. 셀이 표시되거나 클릭되는 경우 하드 드라이브에서 파일을로드하기 만하면됩니다.

+0

간단하고 작동, 고맙습니다 :) – Luffen

1

에 감사드립니다 - 예를 들어, 할당 된 셀 뷰의 총 수가 화면에서 볼 수있는 최대 수보다 커서는 안되며, 축소판 이미지에 대한 할당/참조 수는 총 셀 수를 초과하지 않아야합니다. 새 동영상을 나타내는 행을 표시 할 때마다 이미지 뷰는 새로운 것과 같이 재사용 될 가능성이 큽니다.

데이터 배열 (잠재적으로 무제한 개체가 포함 된 다운로드 한 클립의 배열)은 테이블 뷰의 셀 배열과 완전히 별개이며 상대적으로 작은 수입니다.

내 조언은 이미지의 다운로드 캐시를 생각하는 것입니다. 기본적으로 미리보기 이미지를 다운로드 할 때 각 고유 한 문자열 ID를 할당하고 실제 이미지 파일을 디스크에 씁니다. 모델 개체에 고유 한 ID 문자열을 할당하십시오. tableview에서 이미지를 표시 할 준비가되면 ID 문자열을 사용하여 셀의 이미지를 찾고 디스크에서 이미지를로드 한 다음 이미지보기를 채 웁니다. 이미지를 유지하지 않는 한 이미지를 표시하는 셀이 스크린 외부로 나올 때 이미지가 해제되어야합니다. 메모리가 부족한 상태에서로드 된 이미지의 캐시를 추가로 비울 수 있습니다.

+0

노력에 감사하지만 간단한 버전으로갔습니다. – Luffen

+1

예. 그것은 거의 같은 대답입니다. 이미지가 일반 또는 사용자 정의 셀 하위 클래스에 할당되는 경우에도 이미지가 해제됩니다. – isaac

관련 문제