2013-11-05 8 views
10

Moja aplikacja odbiera ostrzeżenie o małej ilości pamięci z powtarzającą się czynnością i ostatecznie ulega awarii. Kiedy profilowałem w instrumentach, widziałem tylko 5,7 MB żywych bajtów podczas awarii. (Awaria nie pokazuje żadnego śledzenia, błędów, itp. Po prostu się kończy, co wskazuje na awarię pamięci.)Aplikacja odbierająca ostrzeżenie o małej ilości wolnego, ale ma tylko 5,7 MB żywych bajtów.

Dlaczego moja aplikacja ulega awarii z tak niskim poziomem pamięci? I już testuje na iOS 5.1 na iPada 1.

Instruments screenshot

Edit:
udało mi się naprawić upaść. Było to spowodowane dodatkowym zatrzymaniem wywołania obiektu, który ma 3 UIImages jako właściwości. Nagromadzenie tych obiektów spowodowało ostrzeżenie i awarię pamięci.

Jednak wciąż pozostaje pytanie: dlaczego instrumenty pokazują, że było tylko 5,7 MB żywych bajtów? Czy może to być spowodowane automatycznym buforowaniem w postaci UIImage's?

+0

Przyczyną awarii może być brak pamięci. Co to jest błąd awarii? – Raptor

+0

Dobra myśl, ale nie ma żadnego śladu ani błędu. Po prostu się kończy. (Dodałem to do pytania w edycji.) –

+0

jak o wpisaniu 'bt' (następnie naciśnij Enter) w konsoli Xcode? co mówi kompilator? – Raptor

Odpowiedz

0

Nie widzę żadnych widocznych nieszczelności w opublikowanym przez ciebie kodzie, ale jeśli próbujesz przerysować obraz (prawdopodobnie w celu wymuszenia natychmiastowej dekompresji), to jest to niezwykle skomplikowany sposób. Po prostu zrób to:

- (void)loadImage:(UIImage *)image 
{ 
    UIGraphicsBeginImageContextWithOptions(image.size, image.scale); 
    [image drawAtPoint:CGPointZero]; 
    self.someImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 

Mam nadzieję, że naprawi to wyciek, który widzisz.

+1

ya było wiele manipulacji piksel po pikselu w środku tej metody, którą wypatroszyłem dla uproszczenia. kiedy skomentowałem ten kod, ten sam problem nadal występował, więc pomyślałem, że nie jest on odpowiedni do pokazania. –

0

Ustawiłeś NSZombieEnabled na YES w zmiennych środowiskowych?

Po włączeniu zombie pamięć nigdy nie jest tak naprawdę uwolniona, ale pozostaje w puli zombie do debugowania odniesień do nieprawidłowych wskaźników.

Powiązane problemy