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) მითითებები, რომლებიც არ ზრდიან გამოთვლას.