Swift kontekstində unowned nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Unowned Swift-də avtomatik yaddaş idarəsinə (ARC) istinad edir. Unowned istinadlar, iki obyekt bir-birinə güclü istinad etdikdə yaranan güclü istinad döngələrini qarşısını almaq üçün istifadə olunur. Unowned istinad obyekti üçün istinad sayını artırmır. Weak istinaddan fərqli olaraq, unowned istinad həmişə mövcud olan nümunəyə işarə etdiyini gözləyir; əgər unowned istinad ilə göstərilən nümunə sərbəst buraxılsa, ona giriş cəhdi icra zamanı səhvə səbəb olacaq. Bu, əlaqəli obyektin həyat dövrü unowned istinadını ehtiva edən obyektin həyat dövrü ilə eyni və ya daha uzun olduqda istifadə olunur.
İstifadə nümunəsi:
class Department {
var name: String
var courses: [Course] = []
init(name: String) {
self.name = name
print("\(name) şöbə başlanır")
}
deinit {
print("\(name) şöbə sonlandırılır")
}
}
class Course {
var name: String
unowned var department: Department // Unowned zəif istinad
init(name: String, department: Department) {
self.name = name
self.department = department
print("\(name) kurs başlanır")
}
deinit {
print("\(name) kurs sonlandırılır")
}
}
var accounting: Department? = Department(name: "Hesablama")
var introToAccounting: Course? = Course(name: "Hesablama ilə tanışlıq", department: accounting!)
accounting!.courses.append(introToAccounting!)
accounting = nil // İndi Department obyekti sərbəst buraxıla bilər
introToAccounting = nil // İndi Course obyekti sərbəst buraxıla bilər
Bu nümunədə, Course Department-a unowned istinad edir. Çünki, Course Department olmadan mövcud ola bilməz (mənəvi olaraq), və Department courses massiv vasitəsilə Course-un həyat dövrünü idarə edir, ona görə də unowned burada uyğundur. Bu, accounting və introToAccounting arasındakı güclü istinad döngüsünü qarşısını alır. accounting nil-ə çevrildikdə, Department obyekti sərbəst buraxılır və sonra Course obyekti də, ona artıq güclü istinadlar olmadığı üçün, sərbəst buraxılır.