Pomimo dokumentacji Apple indicating otherwise, NSURLCache
na iOS nie robi wcale buforowania dysku (flashowania). Możesz podklasę NSURLCache
zmienić zachowanie operacji pobierania i zapisywania w celu użycia dysku (na przykład SDURLCache
), ale z powodu następujących poważnych ograniczeń użycia i implementacji pamięci podręcznej, to nie działa tak dobrze jak Ty " d spodziewać:NSURLConnection na iOS nie próbuje buforować obiektów większych niż 50 KB
NSURLConnection
nawet nie zadzwonićstoreCachedResponse:forRequest:
plików przez około 50 KB (> = 52428 bajtów, które mają być dokładne). To sprawia, że podklasyNSURLCache
bezcelowe dla naszego wykorzystania (obrazy 200KB), ponieważ nie będzie nawet dostać się do pamięci podręcznej. W rezultacie musimy ręcznie dodać buforowanie na poziomie powyżejNSURLConnection
.- Nawet jeśli ręcznie zostanie wywołana instrukcja NSURLCache
storeCachedResponse:forRequest:
, przechowuje ona tylko odpowiedź w pamięci, jeśli jest mniejsza niż około 180 KB. Przetestowałem to, ręcznie wywołując metodę storeCachedResponse i widząc, że przed/pocurrentMemoryUsage
nie zmieniło się dla długości danych powyżej około 180 KB. Musimy więc napisać własne buforowanie pamięci LRU.
Czy ktoś jeszcze zauważył te problemy? Czy jest coś, czego mi brakuje?
FYI, biegnę iOS 4.3 w symulatorze i na iPada 2.
ASIHTTP nie jest już obsługiwany –