2013-07-30 2 views
0

내 앱에서 새 데이터를 받으면 내 View Controller에서 알림을 보내고받습니다. 뷰 컨트롤러는 tableview 섹션 중 하나를 다시로드합니다. 이것은 일반적으로 40ms 정도 걸립니다.테이블 뷰 섹션을 다시로드 할 때의 성능 문제

그러나 다른보기를 밀어 넣은 경우 알림은 여전히 ​​원래 컨트롤러에서 처리되지만 tableview를 다시로드하는 데 약 10-20 배 더 오래 걸립니다.

필자는 분명히 내 tableview 성능을 향상시킬 수 있지만 우선이 문제의 원인을 이해해야합니다. 또한 직접 디버깅하는 방법에 대해 Instruments를 사용하여 도움을 주셔서 감사합니다. 지금까지 'Time Profiler'도구를 실행했으며 대부분의 노력이 시스템 방법 인 '[UIView(Hierarchy) layoutIfNeeded]'에서 소비 된 것처럼 보입니다. 이것은 나에게별로 의미가 없다.

+0

reloadSections : withRowAnimation :이 컨트롤러가 화면 상에 없을 때 테이블보기에서 여전히 호출 중입니까? – rdelmar

+0

컨트롤러가 여전히 정상적인 방법으로 해당 알림에 응답하고 있습니다 (예). 사용자가 다른 곳에있을 때 무언가가 변경되면 테이블 뷰가 업데이트된다는 아이디어가 있습니다. –

+0

보기가 화면에 나타나지 않을 때 나는 그 생각을 잘 모르겠습니다. 어쩌면 당신은 테이블 뷰의 업데이트로부터 데이터 소스의 업데이트 (통지에 의해 행해지는)를 분리 할 수 ​​있고, 뷰가 스크린 상에 있다면 단지 후자 만 할 수 있습니다. – rdelmar

답변

0

화면 상에없는 요소에서 UI를 업데이트 할 필요는 없습니다. UI 업데이트가 주 스레드에서 발생하므로 사용자 환경에 부정적인 영향을 미칩니다.

(백그라운드 스레드에서) 데이터 소스를 업데이트하는 것이 적절해야하며, 다음에 사용자에게 표시 될 때 테이블 뷰를 업데이트 할 수 있습니다.

+0

그것이 내가 취하는 접근법이라면 나는 사라질 때 완전히 알림을 구독 취소하고 다시 구독하는 것처럼 보일 것입니다. 그렇지 않으면 몇 가지 엣지 경우를 코드화해야합니다. 그러나 근본 원인을 가장 잘 이해하고 싶습니다. 왜 화면이 화면에서 벗어나 화면에서 벗어날 때 같은 방법으로 시간이 오래 걸릴까요? –

+0

보기가 꺼져있을 때 주 스레드가 사용자 상호 작용을 처리하고 표시된보기에서 UI 업데이트를 수행하므로 코드가 주 스레드에서 실행되기 때문에 화면에 표시되지 않았을 것입니다. 그래도 그것을 보지 않고 말할 수 없다. – cmyr

관련 문제