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 ამას ავტომატურად მართავს.