우리 앱에서의 스크롤링 성능을 향상시키고 자합니다. 나는 일반적으로 받아 들여지는 모든 조언을 따랐다. (CG로 그려라. 셀은 불투명하고 서브 뷰는 없다.) 배경 CPU와 네트워크 활동이있을 때 때로는 더듬 거리다.CGLayer를 사용하여 UITableView에서 셀을 캐시하기
하나의 해결책은 여기에 명시된 :
http://www.fieryrobot.com/blog/2008/10/08/more-glassy-scrolling-with-uitableview/
우리가 시도 세포의 비트 맵 스냅 샷을 캐시하는 것입니다. 그러나 비트 맵은 흐릿 해져서 1 톤의 메모리를 사용했습니다 (각각 ~ 수백 kb).
그래픽 카드의 메모리로 이동하기 때문에 CGLayer 또는 CALayer (?)를 사용하여 셀을 캐시하는 것이 좋습니다. 그럼 몇 가지 질문,
1) 어떤 시도 했습니까? 샘플 코드?
2) iphone/ipod touch 그래픽 카드의 메모리 용량은 얼마나됩니까? 이게 말이 되니?
3) 속도 향상에 대한 다른 제안 사항이 있습니까?
I는 (전화)에 CPU 샘플러를 사용
추가 정보 및 체계적 문제를 파악하는 셀로부터 물건을 제거. 몇 가지 :
1) 셀 설정이 아닙니다. 드로잉 호출 (drawinrect 등) 만 제거하고 설정은 그대로두면 유리처럼 보입니다.
2) 가장 작은 이미지 (25x25 png)의 그림이 아닙니다.
3) 두 번째 또는 세 번째 이미지를 추가하면 (첫 번째는 큰 배경 320x1004kB이고 다른 하나는 단추 이미지 61x35 4kB입니다) 그게 더듬 거립니다. 클래스 메서드에서 두 UIImages 잡아, 그래서 그것은 캐시됩니다.
4) 텍스트도 문제입니다. drawRect는 사용중인 NSString drawInRect 메서드에서 시간의 75 %를 소비합니다. 유사 :
[mytext drawInRect : drawright withFont : myFont lineBreakMode : UILineBreakModeTailTruncation];
이러한 호출은 webcore를 통과하는 것으로 보이며 그 중 일부는 더듬 거리는 원인이 될 수 있습니까? 두 줄의 텍스트와 하나의 작은 단락을 포맷 할 수 있어야합니다. 타원으로 텍스트를 잘라내는 기능이 필요합니다. 중요한 경로에서이를 수행하고 캐시 할 수 있습니까? 레이어로 그 부분을 할 수 있을까요?
이 질문을 해결하기 위해 원본 게시물에 몇 가지 추가 정보를 추가했습니다. 여전히 적당한 양의 메모리에 셀을 캐시하는 방법이 있어야합니까? –
사실 링크 된 솔루션은 극단적 인 것이기 때문에 대부분의 iPhone 개발자는 기본 셀 재사용 메커니즘을 사용하여 드로잉을 장치 자체에 남겨 둡니다. 'tableView : cellForRowAtIndexPath :'를 게시 할 수 있다면, 도움이 될 것입니다. 드로잉 퍼포먼스에 가기 전에 실제로 시작해야합니다. –
재사용 방법을 사용 중입니다. 모든 재사용 및 셀 설정을 수행 할 수 있으므로 문제가 나타나지 않지만 성능을 제대로 나타내지 않으면 문제가 발생하지 않습니다. 셀을 캐시하기까지 실제로 갔기 때문에 데이터를 설정할 필요가 없지만 병목 현상은 아닙니다. –