Sobes.tech
Junior — Middle

აღწერეთ ყველაზე რთული პრობლემა შეცდომასთან დაკავშირებით, რომელთანაც მოგიწიათ გამკლავება, და როგორ გადაჭარით

sobes.tech AI

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

Swift-დამაკავშირებელი ციკლური მითითებები, რომლებიც მე შევხვდი, დაკავშირებული იყო მეხსიერების სიწმინდესთან. ერთ პროექტში, აპლიკაცია უცებ დაიწყო ძალიან დაბალი სიჩქარით მუშაობა და ბევრი მეხსიერების მოხმარება.

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

მოქნილი გამოსავალი:

  • ყველგან, სადაც დახურვები იყენებდნენ self-ს, დავამატე [weak self] ან [unowned self] კონტექსტის მიხედვით.
  • გადავხედე ობიექტების სიცოცხლის ციკლს და დავრწმუნდი, რომ ისინი სწორად განთავისუფლდნენ.
  • ცვლილებების შემდეგ, კვლავ გამოვცადე აპლიკაცია Instruments-ით; სიწმინდე არ იქნა აღმოჩენილი, და შესრულება დაბრუნდა ნორმალურ მდგომარეობაში.

ეს გამოცდილება მასწავლა ყურადღება მიაქციოს მითითებების დაჭერას დახურვებში და profile-ტულ ინსტრუმენტებს გამოიყენოს რთული ბაგების პოვნისთვის.