Junior — Middle
შესაძლოა ძლიერი მითითება ერთეულში მეხსიერების გაჟონვას გამოიწვიოს?
sobes.tech AI
პასუხი AI-სგან
დიახ, iOS-ში ობიექტებს შორის ძლიერი მიმაგრებების არსებობა შეიძლება გამოიწვიოს მეხსიერების გაჟონვა, განსაკუთრებით თუ წარმოიქმნება ციკლური მიმაგრება (retention cycle). ეს ხდება, როდესაც ორი ობიექტი ერთმანეთთან ძლიერ მიმაგრებებით ინახავს ერთმანეთს, და ARC სისტემა ვერ ახერხებს მათ გათავისუფლებას, რადგან ორივე ობიექტის მიმაგრების გამოთვლილი არ არის ნული.
ასეთ გაჟონვების თავიდან ასაცილებლად, გამოიყენება სუსტი (weak) ან უვარგის (unowned) მიმაგრებები, რომლებიც არ ზრდიან მიმაგრების გამოთვლას და საშუალებას აძლევენ ციკლის გაწყვეტას.
ციკლური მიმაგრების მაგალითი:
class Person {
var apartment: Apartment?
}
class Apartment {
var tenant: Person?
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // აქ წარმოიქმნება retenცული ციკლი
გადარჩენის თავიდან ასაცილებლად, ერთ-ერთ მიმაგრებას შეიძლება სუსტი გახდეს:
class Apartment {
weak var tenant: Person?
}