Sobes.tech
Junior — Middle

როდის არის უკეთესი გამოიყენოთ weak ან unowned მეხსიერების მართვაში განვითარების გუნდში?

sobes.tech AI

პასუხი AI-სგან

iOS-ში, მეხსიერების მართვისთვის ARC (ავტომატური მითითების გამოთვლა) გამოიყენება სუსტი (weak) და არასანდო (unowned) მითითებები, რათა თავიდან აიცილოს ობიექტების შენახვის ციკლები.

  • weak გამოიყენება, როდესაც მითითება შეიძლება ერთ დროს გახდეს nil, ანუ მითითებული ობიექტი შეიძლება წაიშალოს. სუსტი მითითება ავტომატურად ხდება nil, როდესაც ობიექტი გათავისუფლდება. ეს შესაფერისია, როდესაც კავშირი არ არის აუცილებელი და ობიექტი შეიძლება გაქრეს.

  • unowned გამოიყენება, როდესაც მითითება ყოველთვის უნდა მიუთითებდეს არსებულ ობიექტზე და არ შეიძლება იყოს nil. თუ ობიექტი გათავისუფლდა და unowned მითითება დარჩა, ეს გამოიწვევს შეცდომას შესრულების დროს. ჩვეულებრივ, unowned გამოიყენება, როდესაც მითითებულ ობიექტის სიცოცხლის ციკლი გარანტირებულია, რომ უფრო გრძელი იქნება, ვიდრე მითითების მფლობელის.

მაგალითი:

class Parent {
    var child: Child?
}

class Child {
    weak var parent: Parent? // weak, რადგან parent შეიძლება ადრე წაიშალოს
}

// ან

class Customer {
    let card: CreditCard
    init() {
        card = CreditCard(customer: self)
    }
}

class CreditCard {
    unowned let customer: Customer // unowned, რადგან ბარათი ვერ არსებობს მომხმარებლის გარეშე
    init(customer: Customer) {
        self.customer = customer
    }
}

საჯამო:

  • გამოიყენეთ weak, როდესაც მითითება შეიძლება გახდეს nil და გსურთ თავიდან აიცილოთ შენახვის ციკლები.
  • გამოიყენეთ unowned, როდესაც მითითება ყოველთვის უნდა იყოს ვალიდური და ობიექტი გრძელია მითითებისგან მეტი ხანგრძლივობით.