Peki swift yığın belleğini nasıl yönetir?

class Shop {
    let name: String
    init(name: String) {
        self.name = name
    }
}
override func viewDidLoad() {
    super.viewDidLoad()
    let shop = Shop(name: “Sweet Tooth”)
}

Bu durumda, MyViewController kapsam dışına çıkmadığı sürece mağaza nesnesi kaldırılmayacaktır. Ancak runApp () işlevini aşağıdaki gibi tanımlarsak:

func runApp() {
    let shop = Shop(name: “Sweet Tooth”)
}

Peki bellek sızıntıları nasıl olur?

class Cake {
    let name: String
    var soldBy: Shop?
    init(name:String) {
        self.name = name
    }
}

Şimdi, aşağıdaki kod parçasını runApp () 'ye eklersek:

let cake = Cake(“Sweet Tooth Special Chocolate Truffle Cake”)

Bu bir Cake nesnesi yaratır. Ardından, Dükkan'a bir 'Cakes' niteliği ekleyin.

var cakes: [Cake] = []
fun sells(cake: Cake) {
    self.cakes.append(cake)
    item.soldBy = self
}

 Gönderi için resim

Güçsüz? Sahipsiz?

 Gönderi için resim

Örneğimize geri dönersek ve Cake sınıfında 'soldBy' bildirimini şu şekilde değiştirin:

weak var soldBy: Shop?

Kapanmış referans döngüleri

lazy var cakeCount: () -> Int {
    self.cakes.count
}
lazy var cakeCount: () -> Int { [weak self] in
    self?.cakes.count
}