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
}
}
ასე, თუ მიმთითებლები სწორად მართავენ, მეხსიერება ავტომატურად გათავისუფლდება.