Sobes.tech
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.