Sobes.tech
Junior — Middle

როგორ ხდება მიმთითებელი მონაცემთა ტიპების მეხსიერების განაწილება და გათავისუფლება?

sobes.tech AI

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

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

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

მაგალითი:

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

var person1: Person? = Person(name: "Иван") // მითითებების გამოთვლა = 1
var person2 = person1 // მითითებების გამოთვლა = 2
person1 = nil // მითითებების გამოთვლა = 1
person2 = nil // მითითებების გამოთვლა = 0, Person ობიექტი წაიშლება მეხსიერებიდან

ამ გზით, პროგრამისტს არ სჭირდება მეხსიერების ხელით გათავისუფლება — ARC ამას ავტომატურად მართავს.