Zəif və güclü bağlantılar arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Yaddaş idarəetmə mexanizminin (ARC - Avtomatik Referans Sayımı) fərqi.
-
Güclü referans (Strong reference): Ob'ektin referanslar sayğacını 1 artırır. Ob'ekt, ona ən azı bir güclü referans olduğu müddətdə yaddaşdan azad edilə bilməz. Bu davranış Swift-də xüsusiyyətlər və dəyişənlər üçün standartdır.
-
Zəif referans (Weak reference): Ob'ektin referanslar sayğacını artırmır. İki və ya daha çox ob'ektin bir-birinə güclü referanslar saxlaması halında yaddaş sızmasının qarşısını almaq üçün istifadə olunur. Zəif referanslar həmişə opsionaldır (
Optional), çünki onlara istinad edən ob'ekt hər zaman sərbəst buraxıla bilər. Ob'ekt sərbəst buraxıldıqda, zəif referans avtomatik olaraqnilolur.
Zəif referans və onun qarşısını almaq üçün nümunə:
class Person {
let name: String
var apartment: Apartment? // Başlanğıcda güclü referans
init(name: String) { self.name = name }
deinit { print("\(name) sərbəst buraxılır") }
}
class Apartment {
let unit: String
weak var tenant: Person? // Zəif referans
init(unit: String) { self.unit = unit }
deinit { print("Məişət \(unit) sərbəst buraxılır") }
}
var john: Person? // Person nümunəsi
var unit4A: Apartment? // Apartment nümunəsi
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
// Güclü referans döngüsü yaratmaq:
// john, mənzilə güclü referans saxlayır
// mənzil, şəxsə güclü referans saxlayır
john!.apartment = unit4A
unit4A!.tenant = john // Bu zəif olmalı, döngünü pozmaq üçün
john = nil // Nil-ə təyin etmək, döngü varsa, sərbəst buraxmaz
unit4A = nil // Nil-ə təyin etmək, döngü varsa, sərbəst buraxmaz
// Zəif referans istifadə edilərkən gözlənilən çıxış:
// John Appleseed sərbəst buraxılır
// Mənzil 4A sərbəst buraxılır
weak olmadan tenant üçün, destruktorlar çağrılmayacaq, bu isə yaddaş sızmasını göstərir.