2014-09-02 10 views
5

Testuję na telefonie iPhone 4 z systemem iOS 7.1 podłączonym do Xcode 5.1.1. Nie rozumiem, dlaczego otrzymuję ostrzeżenia z pamięci, a nawet awarie, gdy instrumenty pokazują, że moja aplikacja używa tylko kilku megabajtów i jest dużo wolnej pamięci (patrz załącznik). Jakieś pomysły?Dlaczego ostrzeżenia o pamięci z wykorzystaniem 4 MB i 320 MB za darmo?

Memory Utilization of App while Receiving Warnings

Aktualizacja:

W instrumentach, jak podejrzewałem, znalazłem żadnych przecieków, ale "Anonymous VM" nadmiernie duży rozmiar wydaje i wypełnione danymi obrazu. Każda komórka tabeli w mojej aplikacji wyświetla plik JPEG. Być może powinienem wstępnie skalować te obrazy i to jest przyczyną dużego rozmiaru anonimowej maszyny wirtualnej ... Więcej dochodzenia do zrobienia.

Instruments Allocations

+1

Możesz mieć wiele nieszczelności ... czy sprawdziłeś to na przyrządach? Uruchom analizator statyczny? –

+0

Gdybym miał dużo przecieków, to nie byłoby to widoczne, gdy zużycie pamięci wzrastało z czasem (patrz załączony zrzut ekranu)? – davecom

+0

Nie wierzę tak, nie ... Mogę się mylić, a jeśli tak, to inni mnie poprawią. Ale cała idea przecieku pamięci polega na tym, że wskaźnik do jakiegoś adresu pamięci wypadł z zakresu i został zniszczony, bez tego, że pamięć została zwolniona, więc intuicyjnie nie sądzę, że wyciekająca pamięć byłaby pokazywana przez narzędzia jako "posiadane" "przez twoją aplikację ... w każdym razie, dlaczego nie sprawdzić? To coś, co powinniśmy rutynowo robić. –

Odpowiedz

3

Okazało się obrazy wyświetlane w UIImageViews w każdej komórce tabeli były zapisywane w pamięci w pełnym rozmiarze, a nie skalowane wielkości (rozmiaru UIImageView) . Pojawiło się to tylko w "Anonimowej maszynie wirtualnej" w Instrumentach (ponieważ iOS zapisuje tylko odniesienia do twoich obrazów w twojej stosie aplikacji, a rzeczywiste pamięci podręczne obrazów znajdują się w pamięci systemowej), a nie podstawowe użycie pamięci wyświetlane w Xcode. Rozwiązałem problem przez wstępne skalowanie moich obrazów przed umieszczeniem ich w UIImageViews komórek widoku tabeli. Nie było wycieków.

Powiązane problemy