Każdy problem z wydajnością przewijania UITableView
można rozwiązać za pomocą technik opisanych już w innych odpowiedziach. Jednak wiele razy powolna wydajność jest spowodowana przez coś z natury błędne lub powtarzalne.
Fakt, że UITableView
ponownie wykorzystuje komórki, oraz fakt, że każda komórka może potrzebować własnego obrazu - razem sprawia, że rozwiązanie jest skomplikowane. Od tego, jak jest rozwiązywany w ogólny sposób, tutaj podsumowuję rzeczy, którymi należy się zająć:
- Załaduj dane do źródła danych - z REST/bazy danych. Ten krok powinien zostać wykonany w tle, ostatecznie przy użyciu metody dispatch_async wraz z kolejką GCD.
- Tworzenie i zainicjować odpowiednie obiekty modelu danych i umieszczenie ich wewnątrz tablicy
[tableView reloaddata]
- Wewnątrz
cellForRowAtIndexPath
zawierać kod, który zestaw danych (tekst) z prawidłowym model danych obiektu tablicy.
- Teraz obrazy mogą mieć również postać adresu URL, więc ten krok może być trochę dziwaczny z powodu ponownego użycia komórki przez widok tabeli. Chodzi o to, aby ponownie załadować obraz z pamięci podręcznej urządzenia/adresu URL za pomocą kolejki asynchronicznej, a następnie ustawić go tak, aby poprawiał obraz komórki. (Niezależnie od tego, jaka jest własność obrazu komórki).
Aby uniknąć problemów, zapoznaj się z tym samouczkiem na temat widoku wewnątrz tabeli lazy loading of images.
Jeśli chcesz buforować wysokości komórek (które mogą być kosztowne w obliczaniu i są często używane), podałem przykład. Używaj tego tylko, jeśli jest odpowiedni w twojej aplikacji. http://stackoverflow.com/questions/1371223/how-do-i-cache-something-for-a-tableview/10992748#10992748 –