Sobes.tech
Junior — Middle

Milliseid samme tuleks järgida objekti või ressursi õige hävitamise lõpetamiseks?

sobes.tech AI

Vastus AI-lt

Selleks, et õigesti objekt hävitada või ressursid vabastada iOS-is, tuleb järgida järgmisi samme:

  1. Seotud ressursid vabastada — näiteks sulgeda failid, peatada ajastajad, tühistada võrgupäringud.
  2. Jälgijate ja teavituste eemaldamine — kui objekt on tellitud teavitustele või KVO-le, tuleb sellest loobuda, et vältida mälulekkeid.
  3. Tugevate viidete nullimine — kui on tsüklilisi viiteid, need katkestada, et ARC saaks mälu vabastada.
  4. Puhastust teha deinit meetodis — Swiftis kasutatakse deinit destruktorit viimaste toimingute tegemiseks enne objekti hävitamist.

Näide:

class MyResource {
    var timer: Timer?

    init() {
        timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
            print("Tick")
        }
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification), name: .someNotification, object: nil)
    }

    @objc func handleNotification() {
        // töötlemine
    }

    deinit {
        timer?.invalidate()
        NotificationCenter.default.removeObserver(self)
        print("MyResource hävitatud")
    }
}

Korralik hävitamine tagab ressursside vabastamise ja mälulekkide vältimise.