Junior — Middle
რა განსხვავებაა Strong და Weak ტიპის მითითებებს შორის მეხსიერების მართვაში და მითითების მოდელში?
sobes.tech AI
პასუხი AI-სგან
Strong-კავშირი — ეს ჩვეულებრივი ძლიერი კავშირია ობიექტთან, რომელიც ზრდის ამ ობიექტის მითითებების რაოდენობას (retain count). მანამ, სანამ არსებობს მინიმუმ ერთი ძლიერი კავშირი, ობიექტი არ მოიხსნება მეხსიერებიდან.
Weak-კავშირი — ეს სუსტი კავშირია, რომელიც არ ზრდის ობიექტის მითითებების რაოდენობას. იგი გამოიყენება retenცული ციკლების თავიდან ასაცილებლად. თუ ობიექტი, რომელსაც weak-კავშირი მიუთითებს, წაიშლება, weak-კავშირი ავტომატურად ხდება nil.
მაგალითი Swift-ში:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // weak კავშირი ციკლების თავიდან ასაცილებლად
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // weak-კავშირი
აქ, weak-კავშირი tenant არ უჭერს მხარს Person ობიექტს, რაც ხელს უშლის მეხსიერების გაჟონვას.