Sobes.tech
Junior — Middle

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

sobes.tech AI

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

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

ყოველი ობიექტი მეხსიერებაში აქვს მითითებების გამოთვლის გამოთვლა: აქტიური მითითებების რაოდენობა. როდესაც ობიექტზე მითითება შეიქმნება, გამოთვლა იზრდება; როდესაც მითითება წაიშლება, მცირდება. როდესაც გამოთვლა ნულზე მიაღწევს, ობიექტი ავტომატურად იხსნება მეხსიერებიდან.

მაგალითი:

class Person {
    var name: String
    init(name: String) {
        self.name = name
}
}

var person1: Person? = Person(name: "Alex") // მითითებების გამოთვლა = 1
var person2 = person1 // მითითებების გამოთვლა = 2
person1 = nil // მითითებების გამოთვლა = 1
person2 = nil // მითითებების გამოთვლა = 0, ობიექტი იხსნება

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