Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Bellek yönetimi konusunda ipucularınız var mı ?

+1 oy
204 kez görüntülendi
28, Mayıs, 2016 ios development kategorisinde huseyinvural tarafından soruldu
30, Mayıs, 2016 huseyinvural tarafından düzenlendi

Herkese merhaba, hafta sonu toplayabildiğim kadar bilgi taplamaya çalışıyorum. 

Benim hemen hemen her yerde, kullandığım bir classım var, bunun içinde ilgili textivewların düzenlemesi, veya table rowların derlenip son haline gelmesi gibi işlemler yapılıyor. 

Ben burada ve diğer çalıştığım yerlerde mümkün olduğunca let kullanım var şeklinde değişken tanımlamatan kaçınıyorum. Bunun dışında birde mümkün olan ihtimallerde weak var olarakda tanımlıyorum ama tam olarak çözmüş sayılmam tecrübe ediniyorum.

Fakat farketiğim üzere bellek sorunları görsel yedekleme gibi ihtimaller sırasında oluşuyor. Ben HAneke cache kütüphanesini kullanıyorum, diğer kütüphaneleride incelediğimde genelde performan için ramde resimleri yedeklediklerini görüyorum. Fakat bir sayfada scrool yaptıkca fazlaca resim yükledğimiz ihtimallerde görseller kaliteliyse 1MB bunları ramde cachledikce ram şişiyor.

İlk sorum, instagram gibi sisitemler sizce resim yedeklerken nasıl bir yol izliyor rami değilde dosya sisitemini mi kullamak gerekir bunun bir artısı yada eksisi olur mu ?

İkinci sorum, Navigation Controller yapsıs içinde, A VControler nı ziyaret edip görselleri görüntülediğimizde cacheleri bir değişkende yedekliyoruz.  HAneke kütüphanesi bunun için Shared.Cache gibi bir değişken kullanıyor, biz A VC undan B ye ve Bdende C VControlerına gidersek, Navigation Controler içinde geri gelme ihtimali için A ve B controllerları bekletildiği için image cachlerinin tutulduğu değişken temizlenmiyor, taki geri ihitmalini tamamlayıp açık olan View Controllerlarından kurtulana kadar.  Ben viewDisApper kısmında değişkeni temizlesemde bellek boşalmıyor. Ben bu değişkeni temizleyerek belleği rahatlatabilir miyim, sizce bu normal bir durum mu ? Nasıl bir sorun var çözemedim, main VC gelsem ve belleği temizlese bile, bellek durumu ilk haline gelmiş gibi olmuyor. 

Uygulamayı açıyorum, 20MB bellek kulanımı görsel listelenen VC içinde giriyorum, 30MB bellek kullanımı geri geldiğimde 23MB bellek kullanımı oluyor. Sorun nerde, manuel olarak temizlemem gereken bir yapımı var çözemedim.

Biliyorum uzun oldu, affınıza sığınıyorum :) Yardımlarınız için çok teşekkür ederim. 

 

1 cevap

+1 oy
31, Mayıs, 2016 burhanaksendir tarafından cevaplandı
2, Haziran, 2016 huseyinvural tarafından seçilmiş
 
En İyi Cevap

Merhaba Hüseyin,
güzel bir konu açmışsın.

  1. Instagram gibi sistemler Disk Cache kullanıyorlar. Avantajı çok, saymakla bitmez :) Mesela en basitinden, kısıtlı olan cihazın belleğini şişirmemiş oluruz ve sürekli didRecieveMermoryWarning almaktan kurtulur uygulamamız. Sonra internet olmadığında içerik gösteririz rahat rahat. Kullanıcı deneyimi olarak süper artı sağlar.
  2. Bunun için, benzeri senaryolarda en basitinden, didRecieveMermoryWarning içerisine manuel olarak hafıza rahatlatma sistemi uygularız. Mesela Yasin üstadın bir ara resimleri kullanma ve hafızayı kontrol etme ile ilgili bir örneği var ki tadından yenmez:
    http://forum.yasinturkoglu.com/95/memory-warning-hatalarını-nasıl-kontrol-edip-düzelteceğiz?show=98#c98
2, Haziran, 2016 huseyinvural tarafından yorumlandı
Aslında örnekteki işlemleri zaten yapıyorum fakat proje biraz büyüyünce, bolca ve ard arda resim video vü müzik gibi şişede durduğu gibi durmayıp, işler sarpa sarmya başlıyor.
Resimler, için SDWEBIMAGE adında temede bir OBJECTIVE-C kütüphanesi olan iöage kütüphanesini kullandım. Oldukça optimize çalışıyor, herkese öneririm.

Cevabın için ayrıca teşekkür ederim.
...