Sobes.tech
Junior — Middle

როდის უნდა გამოიყენოს სუსტი (weak) მიმაგრება დახურვის (closure) შიგნით?

sobes.tech AI

პასუხი AI-სგან

iOS-ის დახურვების (closures) შიგნით სუსტი (weak) მითითებები გამოიყენება ძლიერი (strong) მითითებების ციკლების (retain cycles) თავიდან ასაცილებლად, რაც შეიძლება გამოიწვიოს მეხსიერების გაჟონვა. ეს ჩვეულებრივ მნიშვნელოვანია, როდესაც დახურვა იჭერს ობიექტს (მაგ., self) და ინახება ამ ობიექტის მიერ, ქმნის ურთიერთსხივს ძლიერ მითითებას.

გამოიყენეთ weak, რათა მიუთითოთ self-ის შესახებ დახურვის შიგნით, თუ დახურვა ინახება ობიექტის თვისებად ან შეიძლება იცოცხლოს უფრო ხანგრძლივად, ვიდრე ფუნქციის გამოძახება, რათა თავიდან აიცილოთ ობიექტის მეხსიერებაში შენახვა მისი გათავისუფლების შემდეგ.

Swift-ის მაგალითი:

class ViewController {
    var completion: (() -> Void)?

    func setup() {
        completion = { [weak self] in
            guard let self = self else { return }
            self.doSomething()
        }
    }

    func doSomething() {
        print("მოქმედება შესრულდა")
    }
}

აქ [weak self] თავიდან აცილებს ViewController და completion დახურვის შორის ძლიერ ციკლს.