Junior — Middle
შეგიძლიათ ახსნათ, რა იგულისხმება ტერმინში 'Unowned' მეხსიერების მართვის კონტექსტში?
sobes.tech AI
პასუხი AI-სგან
iOS (და Swift) მეხსიერების მართვის კონტექსტში, ტერმინი "Unowned" ნიშნავს სუსტი მითითებას ობიექტზე, რომელიც არ ზრდის მითითებების რაოდენობას (retain count), მაგრამ ვარაუდობს, რომ ობიექტი არსებობს ამ მითითების გამოყენების დროს.
განსხვავებები weak-თან:
weakმითითება შეიძლება გახდესnil, თუ ობიექტი წაიშლება, და ამიტომ ის გამოაცხადება როგორც არჩევითი.unownedმითითება არ არის არჩევითი და ავტომატურად არ იწერებაnil-ად. თუunowned-ით მითითებული ობიექტი წაიშლება, მის მისაწვდომად მცდელობა გამოიწვევს შესრულების დროს შეცდომას (crash).
გამოყენება ხდება, როდესაც გარანტირებულია, რომ მითითებული ობიექტის სიცოცხლის ხანგრძლივობა მეტია ან თანაბარია მითითების ხანგრძლივობასთან.
მაგალითი:
class Owner {
var pet: Pet?
}
class Pet {
unowned let owner: Owner
init(owner: Owner) {
self.owner = owner
}
}
let owner = Owner()
owner.pet = Pet(owner: owner)
აქ, Pet ინახავს unowned მითითებას Owner-ზე, და ვარაუდობს, რომ Owner ცოცხლობს უფრო ხანგრძლივად, ვიდრე Pet.