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:
-
**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.
-
**Zayıf Referans (Weak Reference):
- Referans sayacını artırmaz.
- Nesne üzerinde güçlü referans kalmadığında dealloc edilmesine izin verir.
weakanahtar kelimesi kullanılarak tanımlanır.- Her zaman opsiyoneldir (
Optional), çünkü referans verilen nesnenilolabilir. - 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 -
**Sahipsiz Referans (Unowned Reference):
- Referans sayacını artırmaz.
- Nesne üzerinde güçlü referans kalmadığında dealloc edilmesine izin verir.
unownedanahtar 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 (
CreditCardher zamanCustomer'a aittir).