İstinad növü istifadə edilərək yaradılmış obyektlərin yaddaşı necə azad edilir?
sobes.tech Süni İntellekt
AI-dan cavab
iOS-da, referans tipləri ilə yaradılmış obyektlər (məsələn, Swift və ya Objective-C-də siniflər) avtomatik Referenslar Sayma Sistemi (ARC — Automatic Reference Counting) tərəfindən idarə olunur. Hər obyekt onun üçün aktiv olan referansların sayını saxlayır. Yeni referans obyektə yaradıldıqda, sayğac artır, və referans artıq istifadə olunmadıqda (məsələn, dəyişən sahədən çıxanda və ya nil-ə təyin olunduqda), sayğac azaldılır.
Obyektin referans sayğacı sıfıra çatdıqda, bu, onun üçün artıq heç kimin müraciət etmədiyi və obyektin tutduğu yaddaşın avtomatik olaraq sərbəst buraxıldığı anlamına gəlir. Bu, yaddaş sızmalarını qarşısını almağa kömək edir və əl ilə idarə etməyə ehtiyac qalmır.
Swift-də nümunə:
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("Şəxs \(name) sərbəst buraxıldı")
}
}
var p1: Person? = Person(name: "Ivan")
var p2 = p1 // referans sayğacı artdı
p1 = nil // sayğac azaldı, amma obyekt hələ də mövcuddur
p2 = nil // sayğac 0 oldu, obyekt sərbəst buraxıldı
İki obyekt bir-birinə referans verdikdə, yaddaşın sərbəst buraxılmasını əngəlləyən döngüvi referanslar (retain cycles) yaranabilir. Bu vəziyyətin qarşısını almaq üçün weak və ya unowned referanslar istifadə olunur.