İçeriğe geç

Swift Autoreleasepool kullanımı

swift

Merhaba arkadaşlar bu yazımda İOS programlarken bazı ram üzerinde gerçekleşen yığılmalar ve bazen app crash veya ısınma sorunu yol açan kod parçalarını nasıl sabit haale getiririz bundan bahsedeceğim.

Bunun için en önemlisi uygulamalarınızda kesinlikle ARC (Automatic Referance Counting) olayını uygulamanız gerekir. Aksi halde ram sorunları ortaya çıkacaktır. Ek sınıflar kullanıyor veya kendi yazdığınız sınıfların deinit işlemini gerçekleştirmeniz. İşlemler bittikten sonra ramden serbest bırakmanız gerekir. Swift modern bir programlama dili ancak her boşaltım işlemini gerçekleştirmez. Bunun için Weak,Unowned,Lazy değişken ön eklerini kullanmanız uygulamalarda rahatlıklar sağlayacaktır.

Bazı olası durumlarda ram kullanan buffer video işleme veya data işleme fonksiyonlarında Bu kullanımlara rağman şişmeler gerçekleşebilir. Bunun için yine Cacoa kütüphanesinin yardımcı fonksiyonu func autoreleasepool(code: () -> ())  kullanmanız gerekebilir.

Not:Bu fonksiyonu normal olarak yazılan kodlarda kullanmanız tavsiye edilmez. Özel durumlarda kullanmanız uygundur. Örneğin NSData sınıfı otomatik olarak hafızadan boşaltılmaz bu gibi durumlarda kullanabilirsiniz.

Kullanımı aşağıdaki örnekten görebilirsiniz.

func loadBigData() {
    if let path = NSBundle.mainBundle()
        .pathForResource("big", ofType: "jpg") {

        for i in 1...10000 {
            autoreleasepool {
                let data = NSData.dataWithContentsOfFile(
                    path, options: nil, error: nil)

                NSThread.sleepForTimeInterval(0.5)
            }
        }        
    }
}

Bu örnekte big.jpg adlı bir resimimizin dosya yolunu veren path değişkeni var ve deneme amaçlı olarak NSData’daki şişmeyi gözlemlemek için 10.000 kere döndürdüğümüz döngü bulunmakta data veriyi sürekli olarak yükleme yapıyor buda belli bir süre sonra uygulamanın kapanmasına sebebiyet veriyor ancak autoreleasepool kullanmamız her dönen döngüde ramin sürekli şişmesini önlemekte.

Kategori:Swift

Bu yazı yorumlara kapalı.

Copyright © 2022 Kenan Atmaca