რის დროს უკეთესია unowned-ის გამოყენება weak-ის ნაცვლად მეხსიერების მართვაში?
sobes.tech AI
პასუხი AI-სგან
Swift-ში weak და unowned გამოიყენება ძლიერი მითითებების ციკლების თავიდან ასაცილებლად, მაგრამ ისინი სხვადასხვა სიტუაციებში გამოიყენება:
-
weakარის ვარიანტული მითითება, რომელიც ავტომატურად ხდებაnil, როდესაც მითითებული ობიექტი გათავისუფლდება. გამოიყენება, როდესაც მითითება შეიძლება გახდესnilობიექტის სიცოცხლის განმავლობაში. -
unownedარის არასარჩევი მითითება, რომელიც ვარაუდობს, რომ მითითებული ობიექტი ყოველთვის იქნება არსებულ დროს ამ მითითების გამოყენებისას. თუ ობიექტი გათავისუფლდა,unowned-ზე წვდომა გამოიწვევს შესრულების დროს შეცდომას.
სწორი გამოყენების შემთხვევებია, როდესაც:
- მითითება ყოველთვის უნდა მიუთითებდეს არსებულ ობიექტზე (მაგალითად, მშობელი ობიექტი, რომელიც უფრო ხანგრძლივია, ვიდრე შვილი).
- დარწმუნებული ხართ, რომ მითითებული ობიექტის სიცოცხლის ხანგრძლივობა არ იქნება მოკლე, ვიდრე მითითების ხანგრძლივობა.
მაგალითი:
class Customer {
let name: String
var card: CreditCard?
init(name: String) {
self.name = name
}
}
class CreditCard {
let number: UInt64
unowned let customer: Customer
init(number: UInt64, customer: Customer) {
self.number = number
self.customer = customer
}
}
let john = Customer(name: "John Appleseed")
john.card = CreditCard(number: 1234_5678_9012_3456, customer: john)
აქ, CreditCard აქვს unowned მითითება Customer-ზე, რადგან ბარათი ვერ იარსებებს მომხმარებლის გარეშე, და მომხმარებელი უფრო ხანგრძლივია, ვიდრე ბარათი.