Sobes.tech
Middle+

Bir protokol olan bir alana zayıf bir referans nasıl oluşturulur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Protokol türündeki alan bildiriminden önce weak veya unowned anahtar kelimeleri kullanılabilir.

protocol MyProtocol: AnyObject { // Protokol sadece sınıflarla sınırlandırılmalı
    func doSomething()
}

class MyClass {
    weak var delegate: MyProtocol? // MyProtocol türündeki alan için zayıf referans
    unowned var helper: MyProtocol // MyProtocol türündeki alan için sahip olmayan referans (nesnenin her zaman var olduğundan eminseniz)
}

Protokolün sadece sınıflarla sınırlandırılması (: AnyObject) önemlidir, böylece zayıf veya sahip olmayan referanslar kullanılabilir. Bu, protokolü uygulayan türün bir referans türü olduğunu, değer türü olmadığını garanti eder.

Protokol türündeki alan için weak, alanın referans ettiği nesnenin, bu referansı içeren nesneden önce serbest bırakılabileceği durumlarda kullanılır. Referans edilen nesne serbest bırakılırsa, alan otomatik olarak nil olur.

unowned, alanın referans ettiği nesnenin her zaman aynı veya daha uzun bir yaşam döngüsüne sahip olduğundan emin olduğunuz durumlarda kullanılır. unowned kullanımı yalnızca, döngüsel referansların olmadığını garanti ediyorsanız ve referans edilen nesnenin her zaman geçerli olduğunu biliyorsanız güvenlidir. Nesne serbest bırakılırsa ve unowned referansı aracılığıyla erişmeye çalışırsanız, çökme olur.

Çoğu durumda, weak, delege ediciler ve benzeri desenler için kullanılır.