Middle
Swift dilində unowned nədir və necə istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Swift-də unowned referans (zəif dolayı mülkiyyət) iki obyekt bir-birinə güclü istinad etdikdə, onların yaddaşdan azad edilməsini əngəlləmək üçün istifadə olunur.
unowned-in xüsusiyyətləri:
unownedistinad etdiyi obyektin həmişə mövcud olduğunu təmin edir, bu istinad istifadə edilən zaman.- Əgər
unownedistinada olan obyektə giriş cəhd etsəniz və obyekt artıq azad edilibsə, iş vaxtı xətası (runtime crash) baş verəcək. - Bu, istinad edən obyektin ömür dövrü onun istinad etdiyi obyektin daha qısa olmadıqda istifadə olunur. Yəni,
unownedistinad obyektə güc vermir.
İstifadə nümunəsi bağlamada:
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
deinit {
print("\(name) azad edilir")
}
}
class CreditCard {
let number: UInt64
unowned let customer: Customer // Customer-ə unowned istinad
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
deinit {
print("Kredit kartı #\(number) azad edilir")
}
}
var john: Customer? // Azad etməyə imkan vermək üçün opsional Customer
john = Customer(name: "John Appleseed")
john!.card = CreditCard(number: 1234_5678_9012_3456, customer: john!)
// `nil` təyin etmək, Customer və Card-in azad edilməsinə səbəb olacaq,
// çünki güclü istinad döngüsü yoxdur
john = nil
Başqa nümunə - bağlamada unowned istifadə:
class HTMLElement {
let name: String
let text: String?
lazy var asHTML: () -> String = { [unowned self] in // unowned self istifadə olunur
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
init(name: String, text: String? = nil) {
self.name = name
self.text = text
}
deinit {
print("\(name) azad edilir")
}
}
var paragraph: HTMLElement? // Opsional HTML elementi
paragraph = HTMLElement(name: "p", text: "salam dünya")
print(paragraph!.asHTML())
// `nil` təyin etmək, HTMLElement-i azad edəcək, çünki bağlam onu güclü tutmur
paragraph = nil
unowned və weak arasında seçim, referansın nil olub-olmamasına bağlıdır. Əgər referans heç vaxt nil ola bilməzsə, unowned istifadə edin. Əks halda, weak istifadə edin.