Sobes.tech
Junior — Middle

Kokius žingsnius reikia atlikti, kad teisingai užbaigtumėte objekto ar ištekliaus sunaikinimą?

sobes.tech AI

Atsakymas iš AI

Norint teisingai sunaikinti objektą arba atlaisvinti išteklius iOS, reikia atlikti šiuos veiksmus:

  1. Susijusių išteklių atlaisvinimas — pavyzdžiui, uždaryti failus, sustabdyti laikmačius, atšaukti tinklo užklausas.
  2. Stebėtojų ir pranešimų pašalinimas — jei objektas yra užsiprenumeravęs pranešimus ar KVO, reikia atsisakyti, kad išvengtumėte atminties nutekėjimo.
  3. Stiprių nuorodų nulio nustatymas — jei yra ciklinės nuorodos, jas nutraukite, kad ARC galėtų laisvai atlaisvinti atmintį.
  4. Valymo atlikimas deinit metode — Swift'e, deinit naudojamas atlikti paskutinius veiksmus prieš objekto sunaikinimą.

Pavyzdys:

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() {
        // apdorojimas
    }

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

Tinkamai sunaikinus, užtikrinama išteklių atlaisvinimas ir išvengiama atminties nutekėjimo.