UIWebView önbelleğinin nasıl çalıştığını anlamaya çalışıyorum. UIWebView (en azından mümkün olduğu kadar) tarafından bellek tarafından yönetilen hafızayı süresiz olarak kullanmaktan ve bu nedenle bu yüzden öldürülmekten kaçınmak için hedefim olduğundan beri.Süresiz bellek ayırmak için UIWebView önlenmesi (NSURLCache görünüşte çalışmıyor)
readingotherstackoverflowquestions ve thewebsearching sonra NSURLCache sharedURLCache denemeye karar verdi, ama gerçekten nasıl çalıştığını anlamaya olamaz.
Benim test senaryosu bu birisidir: içimde bir UIWebView ile tek görünümü olduğu
iOS 5için bir test uygulaması hayata geçirdik. Bu UIWebView böyle bir yerel index.html dosyasını yüklemek için gidiyor: Bu index.html dosyasında
// Create an NSString from the local HTML file
NSString *fullURL = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"];
NSURL *url = [NSURL fileURLWithPath:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
// Load local HTML file
[self.webView loadRequest:requestObj];
, ben yüklenen son görüntülerle Flickr'dan bir JSON indirir bir JS komut dosyası var Onların genel beslemeleri. Her görüntü bir listeye eklenir. Bu işlem, beslemeden indirilen 1000 görüntüye ulaşana kadar, her saniye tekrarlanır.
var nImg = 0;
function getData()
{
$.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=?', function(data)
{
var items = [];
$.each(data.items, function(i, image) {
items.push('<li id="' + image.title + '"><img src="' + image.media.m + '"/></li>');
});
$('#page > #imagesList').append(items.join''));
nImg += items.length;
});
$('#page > #numImages').html(nImg);
if(nImg < 1000)
setTimeout("getData();", 1000); // Get more data in 1s
}
$(document).ready(function()
{
getData();
});
Son olarak, benim AppDelegate doğrultusunda, bu post yazılı olarak sharedURLCache kurmak: kodunu Bkz
// Initialize the Cache, so we can control the amount of memory it utilizes
int cacheSizeMemory = 4*1024*1024; // 4MB
int cacheSizeDisk = 32*1024*1024; // 32MB
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
Ama ben aletleri açtığınızda, gerçekleşmesi için ne gerekiyor rağmen ve UIWebView indirilen görüntüleri önbellek için bu sharedURLCache kullanarak olurdu beklediğiniz gibi 4-6MB etrafında düzleştirme yerine, görüntüleri (20MB'a kadar) indirirken bellek devam ederken, tahsisleri kontrol uygulamasını çalıştırın.
herkes yanlış ne yapıyorum biliyor mu? Bir şeyi yanlış anlamış mıyım? Sayfayı yanlış mı yüklüyorum? UIWebView, JS'de yüklenen görüntüler için başka bir önbellek kullanıyor mu?
Lütfen bana düşüncelerinizi bildirin. Gerçekten bu sharedURLCache'nin nasıl çalıştığını ve UIWebView'ın URLRequest'i, görüntüleri, ... kullanıldığında nasıl kullandığını anlamak istiyorum. Belleği denetimsiz olarak ayırabilen bir UIWebView kullanan bir Uygulama kullanmak istemiyorum.
Cevabınız için teşekkürler! Sorunun ne olduğunu ve alıntı yaptığınız bağlantının, bu testi yapmak için izlediğim ile aynı olduğunu anlamadım (bu soruyu sorduğumda görebilirsiniz): $ – veducm