Sobes.tech
Junior — Middle

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

sobes.tech AI

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

iOS-ში მეხსიერების გათავისუფლება ძირითადად ავტომატურად ხდება ARC (Automatic Reference Counting) სისტემის დახმარებით. თითოეულ ობიექტს აქვს მიმთითებლის გამოთვლილი, რომელიც იზრდება ახალი ძლიერი მიმთითებლის შექმნისას და მცირდება მისი წაშლისას. როდესაც გამოთვლილი მიაღწევს ნულს, ობიექტი ავტომატურად განადგურდება და მეხსიერება გათავისუფლდება.

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

მაგალითი:

class Person {
    var name: String
    weak var apartment: Apartment? // სუსტი მიმთითებელი ციკლის თავიდან ასაცილებლად
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // უვითარებელი მიმთითებელი
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

ასე, თუ მიმთითებლები სწორად მართავენ, მეხსიერება ავტომატურად გათავისუფლდება.