Junior — Middle
Aprašykite sudėtingiausią problemą su klaida, su kuria susidūrėte, ir kaip ją išsprendėte
sobes.tech AI
Atsakymas iš AI
Viena iš sudėtingų problemų, su kuria susidūriau, buvo atminties nutekėjimas dėl ciklinių nuorodų Swift kalboje. Viename projekte programa netikėtai pradėjo labai lėtėti ir naudoti daug atminties.
Naudojau Xcode Instruments įrankius su profiliais Allocations ir Leaks, kad tiksliai nustatyčiau, kur įvyksta nutekėjimas. Paaiškėjo, kad keliuose vietose uždarymai (closures) gaudė self be naudojant silpnus nuorodų ([weak self]), kas sukeldavo ciklines nuorodas ir objekto laisvės negalimumą.
Sprendimas:
- Visur, kur uždarymai naudojo
self, pridėjau[weak self]arba[unowned self]priklausomai nuo konteksto. - Peržiūrėjau objektų gyvavimo ciklą ir įsitikinau, kad jie tinkamai atlaisvinami.
- Po pakeitimų vėl išbandžiau programą su Instruments; nutekėjimų nenustatyta, našumas grįžo į normą.
Ši patirtis išmokė mane atkreipti dėmesį į nuorodų gaudymą uždarymuose ir naudoti profilavimo įrankius sudėtingų klaidų paieškai.