2011-08-23 8 views
9

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 ​​podklasy NSURLCache 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żej NSURLConnection.
  • 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/po currentMemoryUsage 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.

Odpowiedz

1

Chciałbym zasugerować przy użyciu biblioteki three20 i TTURLRequest. Wygląda na to, że ma dobre buforowanie dla dużych rozmiarów danych, ponieważ jest używane na Facebooku, a zwłaszcza na zdjęciach.

TTURLRequest jest dość dużo spadek zamiennik NSURLRequest, więc powinno być łatwe do poruszania się i nie mają wiele zależność od reszty Three20

2

nie jestem pewien jak to działa na UIWebvieuw, ale podczas korzystania z NSURLRequest maksymalny rozmiar pliku zależy o tym, jak zainicjować URLCache (initWithMemoryCapacity: (NSUInteger) memoryCapacity ...)

Powiązane problemy