Sobes.tech
Middle+

Protokol olan sahəyə zəif istinad necə yaradılır?

sobes.tech Süni İntellekt

AI-dan cavab

Protokol növündə sahənin elanından əvvəl weak və ya unowned açar sözlərindən istifadə etmək mümkündür.

protocol MyProtocol: AnyObject { // Protokol yalnız siniflərə məhdudlaşdırılmalıdır
    func doSomething()
}

class MyClass {
    weak var delegate: MyProtocol? // MyProtocol növündə sahəyə zəif istinad
    unowned var helper: MyProtocol // Sahəyə aid olmayan istinad, əgər obyektin həmişə mövcud olduğundan əminsinizsə
}

Əhəmiyyətlidir ki, protokol yalnız siniflərə (: AnyObject) məhdudlaşdırılmalıdır ki, zəif və ya aid olmayan istinadlar istifadə oluna bilsin. Bu, protokolu həyata keçirən növün referans növü olduğunu, dəyər növü olmadığını təmin edir.

Protokol növündə sahə üçün weak, sahənin istinad etdiyi obyektin, bu istinaddan əvvəl sərbəst buraxıla biləcəyi hallarda tətbiq edilir. Əgər istinad olunan obyekt sərbəst buraxılırsa, sahə avtomatik olaraq nil olur.

unowned isə, sahəyə istinad etdiyi obyektin həmişə eyni və ya daha uzun ömürlü olduğundan əminsinizsə istifadə olunur. unowned istifadəsi yalnız, zəncirli istinadların olmadığını təmin etdiyiniz və obyektin həmişə etibarlı olduğunu bildiyiniz halda təhlükəsizdir. Əgər obyekt sərbəst buraxılırsa və siz ona unowned istinad vasitəsilə daxil olmağa çalışırsınızsa, crash baş verər.

Əksər hallarda, weak delegatlar və digər oxşar nümunələr üçün istifadə olunur.