2011-08-23 48 views
9

儘管Apple的文檔indicating otherwise,NSURLCache在iOS上根本不執行任何磁盤(閃存)緩存。您可以子類NSURLCache來更改提取和存儲操作以使用磁盤的行爲(如SDURLCache),但由於以下嚴重的緩存使用和實現限制, d預計:iOS上的NSURLConnection不會嘗試緩存大於50KB的對象

  • NSURLConnection甚至不叫storeCachedResponse:forRequest:的文件在50KB左右(> = 52428字節,是精確的)。這使得子類NSURLCache對於我們的使用(200KB圖像)毫無意義,因爲它甚至不會進入緩存。因此,我們必須手動添加高於NSURLConnection的級別的緩存。
  • 即使手動調用NSURLCache的內置storeCachedResponse:forRequest:,它只會將響應存儲在內存中,如果它小於大約180KB。我通過手動調用storeCachedResponse測試了這一點,並且看到currentMemoryUsage之前/之後的數據長度在大約180KB以上沒有變化。所以我們也必須編寫自己的LRU內存緩存。

有沒有其他人注意到這些問題?還是有我失蹤的東西?

通知你,我在模擬器和在iPad 2

回答

1

運行iOS 4.3,我建議使用three20庫和TTURLRequest。這似乎對大數據量具有良好的緩存,因爲它用於Facebook,特別是圖片。

TTURLRequest是相當多的替代了的NSURLRequest下降,所以應該很容易轉移到,並且不會對Three20

其餘多依賴
2

我不知道它如何爲UIWebvieuw工作,但是當您使用NSURLRequest文件的最大大小取決於關於如何初始化URLCache(initWithMemoryCapacity:(NSUInteger)memoryCapacity ...)