Sobes.tech
Junior — Middle

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

sobes.tech AI

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

მართვადი გარემოებში, როგორიცაა iOS-ი ARC-თან (ავტომატური მითითების გამოთვლა), ციკლური მითითებების მქონე ობიექტების მეხსიერების გათავისუფლება ავტომატურად არ ხდება, რადგან ARC ვერ ახერხებს მითითებების ციკლს გაწყვეტას.

ამ პრობლემის გადაჭრისთვის გამოიყენება სუსტი (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
    }
}

აქ, Person და Apartment ერთმანეთზე მითითებას აკეთებენ, მაგრამ ერთ-ერთი სუსტი არის, რაც თავიდან აცილებს მეხსიერების გაჟონვას.

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