Sobes.tech
Junior — Middle

შეიძლება თუ არა თქვენი პრაქტიკა პროგრამებში მეხსიერების ნაკადების გამოვლენისა და აღმოსაფხვრელად?

sobes.tech AI

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

დიახ, iOS აპლიკაციების განვითარების პრაქტიკაში მე შევხვდი მეხსიერების გაჟონვის გამოვლენასა და აღმოფხვრას. ამისთვის ვიყენებ Xcode-ის ინსტრუმენტებს, როგორიცაა Leaks და Allocations პროფილერები.

პროცესი ჩვეულებრივ მოიცავს:

  • აპლიკაციის გაშვებას Instruments-ის საშუალებით და მეხსიერების გამოყენების მონიტორინგს.
  • ობიექტების ძიებას, რომლებიც გამოყენების შემდეგ არ თავისუფლდებიან (გაფლანგვები).
  • კოდის ანალიზს ძლიერი მითითებების, შენახვის ციკლების (retain cycles) გამოვლენის მიზნით, განსაკუთრებით დახურვებში და დელეგატებში.
  • სუსტი (weak) და არამფლობელებელი (unowned) მითითებების გამოყენებას ციკლების გაწყვეტისთვის.

მაგალითად, თუ დახურვაში, self-ი იჭერება სუსტი მითითების გარეშე, ეს შეიძლება გამოიწვიოს გაჟონვა:

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

    func setup() {
        closure = { [weak self] in
            self?.doSomething()
        }
    }

    func doSomething() {
        print("მოქმედება")
    }
}

ეს მიდგომა ეხმარება თავიდან აიცილოს შენახვის ციკლები და მეხსიერების გაჟონვები.