Sztuczki poprawiające wydajność przewijania UITableView iPhone ' a?
Mam uitableview, który ładuje dość duże obrazy w każdej komórce, a wysokość komórek różni się w zależności od rozmiaru obrazu. Wydajność przewijania jest przyzwoita, ale czasami może być szarpana.
Znalazłem te wskazówki, które znalazłem na blogu FieryRobot:
Glassy-scrolling-with-uitableview
Więcej-glassy-scrolling-with-uitableview
Czy ktoś ma jakieś wskazówki dotyczące poprawy wydajności przewijania uitableview?
5 answers
- buforuj wysokość wierszy (widok tabeli może tego często żądać)
- Utwórz najmniej ostatnio używaną pamięć podręczną dla obrazów używanych w tabeli (i Unieważnij wszystkie nieaktywne wpisy, gdy otrzymasz ostrzeżenie o pamięci)
- Rysuj wszystko w
UITableViewCell
'sdrawRect:
jeśli to możliwe, unikaj podglądy za wszelką cenę (lub jeśli potrzebujesz standardowej funkcji dostępności, widoku zawartościdrawRect:
) - utwórz warstwę
UITableViewCell
nieprzezroczystą (to samo dotyczy widoku zawartości, jeśli mieć) - Użyj funkcji reusableCellIdentifier zgodnie z zaleceniami
UITableView
przykłady / dokumentacja - unikaj gradientów/skomplikowanych efektów graficznych, które nie są wstępnie przygotowane na
UIImage
s
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-29 22:57:59
- Jeśli podklasujesz
UITableViewCell
, nie używaj Stalówki, zamiast tego napisz kod. To dużo szybsze niż ładowanie plików Nib. - Jeśli używasz obrazów, upewnij się, że buforujesz je więc nie trzeba ładować z pliku więcej niż raz dla każdego (jeśli masz pamięć-zdziwiłbyś się, jak dużo miejsca zajmują zdjęcia).
- Uczyń tyle elementów nieprzezroczystych, ile możliwe. Podobnie, spróbuj nie i użyj obrazy z przezroczystością.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-29 22:11:20
Programista stojący za Tweetie napisał o tym obszernie i ma jakiś kod, który demonstruje, jak to zostało zrobione dla tej aplikacji. Zasadniczo zaleca jeden niestandardowy widok na komórkę tabeli i rysowanie go ręcznie(zamiast podglądu za pomocą narzędzia Interface Builder, między innymi).
Fast-scrolling-in-tweetie-with-uitableview
Ponadto Apple zaktualizowało własny przykładowy kod TableView w samouczkach TableViewSuite (może w odpowiedzi na to?)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 11:53:09
#1 performance killer dla przewijania UITableView polega na rysowaniu cieni na dowolnej warstwie widoku komórki, więc jeśli przewijanie ma znaczenie, nie rób cieni, chyba że zasadniczo nie spowalnia to głównego wątku.
Myślałem, że trzeba to powiedzieć, ponieważ żadna z zaakceptowanych odpowiedzi nie wspomina o cieniach i warstwach. :+)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-27 06:09:42
Każdy problem z wydajnością przewijania można rozwiązać za pomocą technik opisanych już w innych odpowiedziach. Jednak niejednokrotnie słaba wydajność jest spowodowana czymś z natury błędnym lub powtarzalnym.
Fakt, że UITableView
ponownie wykorzystuje komórki i fakt, że każda komórka może potrzebować własnego obrazu-razem sprawia, że rozwiązanie jest skomplikowane. Z tego, jak to jest rozwiązywane w sposób ogólny, tutaj podsumowuję rzeczy, które powinny być załatwione: {]}
- załaduj dane do źródło danych-z REST / bazy danych. Ten krok powinien być wykonany w tle, ostatecznie używając dispatch_async wraz z kolejką GCD.
- Tworzenie i inicjalizacja odpowiednich obiektów modelu danych i umieszczanie ich wewnątrz tablicy
[tableView reloaddata]
- wewnątrz
cellForRowAtIndexPath
zawiera kod, który ustawi dane (tekst) z właściwego obiektu modelu danych tablicy. - Teraz obrazy mogą być również w formie adresu URL, więc ten krok może być trochę dziwaczny z powodu ponownego użycia komórek przez Widok tabeli. The heart of the faktem jest, aby ponownie załadować obraz z pamięci podręcznej / URL urządzenia za pomocą kolejki asynchronicznej, a następnie ustawić go na poprawną komórkę.obraz (niezależnie od właściwości obrazu komórki).
Aby uniknąć problemów, zapoznaj się z tym samouczkiem o leniwym ładowaniu obrazów wewnątrz widoku tabeli.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-16 13:23:23