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) ეხმარება მეხსიერების გაჟონვების გამოვლენასა და აღმოფხვრაში.