2012-10-31 9 views
11

Zauważyłem, że NSCache eksmituje cały jego obiekt, gdy aplikacja idzie w tle. czy to oczekiwane zachowanie? czy istnieje sposób, aby tego uniknąć?NSCache i tło

Spodziewam się, że eksmituje obiekty, gdy urządzenie zabraknie pamięci nie od razu, gdy aplikacja idzie w tle.

Czy znasz jakąś ważną alternatywę?

Odpowiedz

7

W moim przypadku miało to miejsce, gdy obiekty przechowywane w NSCache nie są zgodne z protokołem NSDiscardableContent. Kiedy dodałem wspomniany protokół, eksmisja obiektów, gdy aplikacja wchodzi w tło, znika.

Ponadto, na podstawie źródła NSCache.m znalazłem here, obiekty, które nie są zgodne z protokołem NSDiscardableContent, nigdy nie są usuwane w czasie wykonywania, nawet aplikacja potrzebuje więcej pamięci i powinna wyrzucać niektóre z jej elementów. Może to jest powodem, dla którego obiekty niezgodne z NSDiscardableContent są eksmitowane, gdy aplikacja wchodzi w tło, ponieważ jest to dobry czas na eksmitowanie ich.