2011-03-03 5 views
6

저는 UITableView 컨트롤러와 UITableView가 있습니다. 나는 위임자 등을 사용하여 모든 것을 설정하고 잘 채 웁니다. 나는 다음과 같은 방법으로 그러나 작은 버그를 발견 :UITableView : cellForRowAtIndexPath가 계속 호출됩니다.

: cellForRowAtIndexPath

나는이 방법이 지속적으로 나는 테이블을 스크롤 할 때마다 호출되는 납니까. 표가 채워진 후에도 계속 전화를 겁니다. 기본적으로 셀이 보이지 않게 이동하면 다시 볼 때 다시 호출됩니다. 그 방법 내에서 NSLog는 셀의 내용을 출력 해주었습니다. 그것이 어떻게 계속 호출되는지 알 것입니다.

이 기능은 셀당 한 번만 호출하여 채우고 수행해야합니까?

답변

8

아니요. 이것은 셀이 필요할 때마다 호출되며 셀이 렌더링 될 때마다 필요합니다.

UITableView는 매우 영리한 작은 동물입니다. 문자 그대로 표시되는 셀과 말 그대로 2 ~ 3 개의 캐시를 그대로 유지합니다. 켜져 있지 않은 셀을 스크롤 할 때가되면 캐시에서 셀을 요청할 수 있으며, 셀이 있으면 다시 사용됩니다.

이 방법은 엄청난 양의 데이터 집합이 실제로 메모리에없고, 화면에있는 셀과 작은 캐시 만 있기 때문에 UITableView에 표시 할 수 있습니다.

+0

감사합니다. 완벽한 말이됩니다. 단지 내가 어떤 미친 루프 하하를 일으키고 있지 않다는 것을 확인하고 싶었다. – Chris

0

이것은 올바른 동작입니다. 그것은 UITableViewCells의 dequeueing과 관련이 있습니다. 이것이 세포 재사용이 중요한 이유입니다. 이렇게하면 이상적으로 재사용되는 메모리에 내장 된 유한, 소량입니다.

자세한 내용과 코드 샘플은 the docs을 확인하십시오.

관련 문제