Junior — Middle
აღწერეთ ყველაზე რთული პრობლემა შეცდომასთან დაკავშირებით, რომელთანაც მოგიწიათ გამკლავება, და როგორ გადაჭარით
sobes.tech AI
პასუხი AI-სგან
Swift-დამაკავშირებელი ციკლური მითითებები, რომლებიც მე შევხვდი, დაკავშირებული იყო მეხსიერების სიწმინდესთან. ერთ პროექტში, აპლიკაცია უცებ დაიწყო ძალიან დაბალი სიჩქარით მუშაობა და ბევრი მეხსიერების მოხმარება.
მე გამოვიყენე Xcode-ის Instruments ინსტრუმენტები, რომლებიც მოიცავდა Allocations და Leaks პროფილერებს, რათა ზუსტად გამოვიკვლიო, სად ხდება სიწმინდე. აღმოჩნდა, რომ რამდენიმე ადგილას, დახურვები (closures) იჭერდნენ self-ს გარეშე გამოყენების სუსტი მითითებების ([weak self]) გარეშე, რაც გამოიწვია ციკლური მითითებები და ობიექტების განთავისუფლების შეუძლებლობა.
მოქნილი გამოსავალი:
- ყველგან, სადაც დახურვები იყენებდნენ
self-ს, დავამატე[weak self]ან[unowned self]კონტექსტის მიხედვით. - გადავხედე ობიექტების სიცოცხლის ციკლს და დავრწმუნდი, რომ ისინი სწორად განთავისუფლდნენ.
- ცვლილებების შემდეგ, კვლავ გამოვცადე აპლიკაცია Instruments-ით; სიწმინდე არ იქნა აღმოჩენილი, და შესრულება დაბრუნდა ნორმალურ მდგომარეობაში.
ეს გამოცდილება მასწავლა ყურადღება მიაქციოს მითითებების დაჭერას დახურვებში და profile-ტულ ინსტრუმენტებს გამოიყენოს რთული ბაგების პოვნისთვის.