Junior — Middle
როგორ ხდება მეხსიერების გათავისუფლება ციკლური მითითებებით ობიექტებისთვის მართვად გარემოებში?
sobes.tech AI
პასუხი AI-სგან
მართვადი გარემოებში, როგორიცაა iOS-ი ARC-თან (ავტომატური მითითების გამოთვლა), ციკლური მითითებების მქონე ობიექტების მეხსიერების გათავისუფლება ავტომატურად არ ხდება, რადგან ARC ვერ ახერხებს მითითებების ციკლს გაწყვეტას.
ამ პრობლემის გადაჭრისთვის გამოიყენება სუსტი (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
}
}
აქ, Person და Apartment ერთმანეთზე მითითებას აკეთებენ, მაგრამ ერთ-ერთი სუსტი არის, რაც თავიდან აცილებს მეხსიერების გაჟონვას.
თუ მითითებების ციკლები არ გაწყვეტა, ობიექტები მეხსიერებაში დარჩებიან, მიუხედავად გარეგანი მითითებების არ არსებობისა, რაც მეხსიერების გაჟონვას გამოიწვევს.