Ben Playfield gibi bir MKMapView kullanan bir iPhone oyunu üzerinde çalışıyorum. Oyunda dakika sadece bir çift sonra uygulama kaçınılmaz halsiz almaya başlıyor ve sonunda düşük bellek nedeniyle çöküyor. suçlu etrafında kazma sonra harita görünümü sürekli daha fazla bellek gerektirdiğini gibi görünüyor. Oyun yakınlaştırma ve haritanın pan yüzden sadece belleği bitene kadar karoların haritanın önbellek sadece Büyümeye devam varsayabiliriz bir sürü gerektirir. o karoların önbellek bulunuyor veya bellek tüketimi bu kadar içeren temizlemek için harita görünümünü zorlamak için herhangi bir yolu var mı?
karoların Temizle MKMapView önbelleğini?
* NOT: Bu cevap iOS 4.1 ve daha düşük de uygundur. Bu yanıt açıklanan sorunlar çoğunlukla * iOS 4.2 düzeltilmiştir
Benim app hem harita kullanır ve aynı zamanda yüksek RAM talep diğer özelliklere sahip olarak bu konuda biraz araştırma yapıyordum.
Bir cevap, ancak geçici bir çözüm bulamadım. MKMapView bellek talepleri Eğer bir alana daha yakın yakınlaştıkça katlanarak yükselmek ve bölgede yakınlaştırılmış o içinde kaydırmak.
MKMapView kiremit önbellek iki düzeyi vardır. Bir Instruments bir malloc ~ 196KB olarak kendini gösterir, diğer farklı boyutlarda NSData (depo) 'dir.
Malloc aktif kullanımdaki fayans gibi görünen ve tahsis edilebilir kaç zor kap vardır. onun UIView boyutuna veya dayalı eğer benim uygulamasında söz konusu sayı, emin 16 değil. Bu tahsisler sıkı yönetilen gibi görünüyor ve bu hafıza uyarılarına cevap verir.
Gerçekten önbelleğe alma o ikinci seviyeye almak zorunda asla Neyse, belli bir yakınlaştırma düzeyinde, diyelim ki, kıta düzeyinde, fayans büyüklüğü göz önüne alındığında, (yeterli bir iPad ekranında Kuzey Amerika'nın en uygun) (NSData (Store) ) harita tamamlamak için. Her şey berrak ve temiz. Ben aktif belleğe dış görüntülerin bir ton yüklerseniz, fayans kendilerini erik. Korku veren!
o önbelleğe alma ikinci seviyeye düştüğünde sorun geliyor. Eğer tüm PLANAT göstermek için yerine 16 karoların aniden yakınlaştırmak ve bu, bu 16 fayans sadece Los Angelas göstermek gerekiyor ve sadece o eski fayans damping yerine kaydırmak gibi NSData (deposuna koyar olur göründükleri) tahsisler serbest olsun asla.
Bu NSData (mağaza) sadece bellekte varsayılan olarak mevcuttur NSURLConnectionCache olduğunu. varsayılan paylaşımlı önbellek (zaten denedim) değil, çünkü bunu sınırlamak için bu önbelleği erişemez.
Ben sıkışıp yer burası.
yetersiz cevap harita yakınlaştırma devre dışı bırakmak ve oldukça geniş bir yakınlaştırma düzeyinde bunu düzeltmek eğer, tamamen bu sorunu önlemek olmasıdır, ama belli ki bazı uygulamalar buna ihtiyacın ... ve bu bildiğim kadarıyla var olarak var.
Onlar (bu arada ben tesadüfen aktif bellekte ayrılan RAM 50+ Meg kadar krank başardı) Harita için bu saçma önbelleği sınırlamak için herhangi bir şekilde ifşa görmek için Apple ile bir destek bileti açtı.
Bu yardımcı olur umarım.
Düzenle
Bir sonraki iOS sürüm bu sınırsız önbellek sorunu çözmüş görünüyor. MKMapView şimdi agresif önbelleğe alınmış fayans verilerini kuru erik. SEVİNMEK!
Eğer ek açıklama görünümlerinde yeniden tanımlayıcı kuruyorsunuz? (Bu sistem, bu incelemeler ayırmak ve bir kez de bellekteki bir görüş az sayıda tutmak anlamına gelir. Müstakil Gösterim yeniden kullanılacaktır kaydırma çünkü o da, kaydırma performansını artırır.)
yeniden bir açıklama görünüm elde etmek için bu yöntemi kullanın:
- (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier
Sadece mapkit ve 768x1024 (ipad boyutunda) bir görünüm boyutuna sahip bir uygulama oluşturursanız Aletleri Tahsisat programı tarafından bildirilen, uygulama kolayca "Canlı Bayt" nin 30 + MB tüketebilir. Bu iPad iOS v3.2.2 (4.2 salınımını sözde sonraki haftalarda kadar son sürümü) üzerinde çalışan dikkati çekti. Benim araştırma hafızanın bu miktar çoğu geliştirici etrafında 15-25 MB uyaran bir seviye 1 bellek alırken rapor ve bu seviyenin hemen sonra çöküyor tek bir uygulama için bir çok şey var gibi görünüyor.













