Sobes.tech
Junior — Middle

Tətbiqlərdə yaddaş sızıntılarının yaranmasına nə səbəb olur?

sobes.tech Süni İntellekt

AI-dan cavab

Proqramlardakı yaddaş sızıntıları, obyektlər və ya məlumatlar üçün ayrılmış yaddaş lazım olduqda sərbəst buraxılmadıqda baş verir. iOS-da bu, tez-tez:

  • Obyektlər arasında referans dövrləri (saxlama dövrləri) ilə əlaqəlidir, xüsusən ARC (Avtomatik Referans Sayımı) istifadə edilərkən. Məsələn, iki obyekt bir-birinə güclü referanslarla müraciət edərsə, onlar sərbəst buraxılmır.
  • Self-i güclü referansla tutan closures-in düzgün istifadə edilməməsi.
  • Timerlər, müşahidəçilər və ya fayl deskriptorları kimi resursların sərbəst buraxılmaması.

Closure ilə saxlanma dövrü nümunəsi:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // self güclü şəkildə tutulur, dövr yaranır
        }
    }
}

Sızıntıları qarşısını almaq üçün, closures-də zəif (weak) və ya mülkiyyət olmayan (unowned) referanslar istifadə olunur və obyektlərin həyat dövrü düzgün idarə edilir.