Sobes.tech
Junior — Middle

რა არის გამოყოფილი მეხსიერების დაკარგვა და როგორ შეიძლება ის წარმოიშვას პროგრამაში?

sobes.tech AI

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

iOS პროგრამაში მეხსიერების გაჟონვა (memory leak) არის მდგომარეობა, როდესაც პროგრამა აგრძელებს არასაჭირო ობიექტებზე მითითებების შენახვას, რის შედეგადაც მეხსიერება არ ითავისუფლება და დროთა განმავლობაში რესურსების რაოდენობა იზრდება.

საბაბები:

  • ციკლური მითითებები (retain cycles) ობიექტებს შორის, განსაკუთრებით ARC-ის (ავტომატური მითითების გამოთვლა) გამოყენებისას.
  • closures-ის გამოყენება self-ის დაჭერით, ბოროტი (weak/self) მითითებების გარეშე.
  • რესურსების არასწორი მართვა, მაგალითად, დელეგატების განთავისუფლების უგულვებელყოფა.

მაგალითი retain cycle-თან closures-ის გამოყენებით:

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

    func setup() {
        closure = {
            print(self) // self-ის დაჭერა ბოროტის გარეშე
        }
    }
}

გადაურჩეთ ამის თავიდან აცილებას, საჭიროა [weak self]-ის გამოყენება:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

სისტემატური ანალიზი Xcode-ის ინსტრუმენტებით (Instruments — Leaks) ეხმარება მეხსიერების გაჟონვების გამოვლენასა და აღმოფხვრაში.