Sobes.tech
Middle

Swift'te hangi tür referanslar vardır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Swift'te üç temel referans türü vardır:

  1. **Güçlü Referans (Strong Reference):

    • Nesnenin referans sayacını artırır.
    • En az bir güçlü referans kaldığı sürece nesnenin dealloc edilmesini engeller.
    • Swift'te varsayılan referans türüdür.
    • Güçlü referans döngülerinin ana nedenidir.
  2. **Zayıf Referans (Weak Reference):

    • Referans sayacını artırmaz.
    • Nesne üzerinde güçlü referans kalmadığında dealloc edilmesine izin verir.
    • weak anahtar kelimesi kullanılarak tanımlanır.
    • Her zaman opsiyoneldir (Optional), çünkü referans verilen nesne nil olabilir.
    • Güçlü referans döngülerini önlemek için kullanılır, bir örneğin diğerinden bağımsız olarak var olabilmesi durumunda.
    class Person {
        let name: String
        weak var apartment: Apartment? // Zayıf referans
        init(name: String) {
            self.name = name
        }
        deinit { print("\(name) dealloc edildi") }
    }
    
    class Apartment {
        let unit: String
        var tenant: Person? // Normal güçlü referans
        init(unit: String) {
            self.unit = unit
        }
        deinit { print("Daire \(unit) dealloc edildi") }
    }
    
    var john: Person?
    var unit4A: Apartment?
    
    john = Person(name: "John Appleseed")
    unit4A = Apartment(unit: "4A")
    
    john!.apartment = unit4A
    unit4A!.tenant = john // Burada güçlü referans döngüsü oluşurdu, weak olmasaydı
    
    // Referanslar sıfırlanır, nesneler dealloc edilir
    john = nil
    unit4A = nil
    
  3. **Sahipsiz Referans (Unowned Reference):

    • Referans sayacını artırmaz.
    • Nesne üzerinde güçlü referans kalmadığında dealloc edilmesine izin verir.
    • unowned anahtar kelimesi kullanılarak tanımlanır.
    • Opsiyonel değildir. Referans verilen nesnenin, onu içeren nesne var olduğu sürece her zaman var olacağı varsayılır.
    • Kullanılan nesne zaten dealloc edilmişse, çalışma zamanında hata (çökme) oluşur.
    • Güçlü referans döngülerini önlemek için kullanılır, bir örneğin diğerinden bağımsız olarak her zaman var olması gereken durumlarda (CreditCard her zaman Customer'a aittir).