transportation the significado programming programación lenguaje language español descargar swift

the - swift(lenguaje de programación)



¿Cuándo debo usar deinit? (6)

Encontré una función llamada deinit() mientras leía la Guía del lenguaje de programación Swift , pero todavía me pregunto por qué y cuándo necesitamos implementarla, ya que no necesitamos administrar la memoria.

Saludos.


Desde iOS9, removeObserver se llama automáticamente.


No es necesario que implemente ese método, pero puede usarlo si necesita realizar alguna acción o limpieza antes de desasignar el objeto.

Los documentos de Apple incluyen un ejemplo:

struct Bank { static var coinsInBank = 10_000 static func vendCoins(var numberOfCoinsToVend: Int) -> Int { numberOfCoinsToVend = min(numberOfCoinsToVend, coinsInBank) coinsInBank -= numberOfCoinsToVend return numberOfCoinsToVend } static func receiveCoins(coins: Int) { coinsInBank += coins } } class Player { var coinsInPurse: Int init(coins: Int) { coinsInPurse = Bank.vendCoins(coins) } func winCoins(coins: Int) { coinsInPurse += Bank.vendCoins(coins) } deinit { Bank.receiveCoins(coinsInPurse) } }

Así que cada vez que el jugador es retirado del juego, sus monedas son devueltas al banco.


Se llama a un deinilizante inmediatamente antes de que se desasigne una instancia de clase, y es útil cuando está trabajando con sus propios recursos. Por ejemplo, si crea una clase personalizada para abrir un archivo y escribir algunos datos, es posible que necesite cerrar el archivo. antes de que se desasigne la instancia de la clase. Lo más importante es que la definición de la Clase puede tener como máximo un desintilizador por clase


Se llama a un desinicializador inmediatamente antes de que se desasigne una instancia de clase. Usted escribe deinializadores con la palabra clave deinit, de manera similar a cómo se escriben los inicializadores con la palabra clave init. Los desinicializadores solo están disponibles en los tipos de clase. Las definiciones de clase pueden tener como máximo un desinicializador por clase. El desinicializador no toma ningún parámetro y se escribe sin paréntesis. Utilicé deinit para eliminar el servidor de notificación de la aplicación, como se indica a continuación.

deinit { NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "gotoLogin"), object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "gotoMain"), object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "gotoRegister"), object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "gotoBook"), object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "gotoCurrentMainMenu"), object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "gotoEventMenu"), object: nil) }


Si está creando una gran cantidad de operaciones en algún objeto que debe ser desasignado a su ritmo, puede hacerlo en deinit


Si su clase administra un identificador de archivo o un recurso diferente, puede cerrar ese identificador en deinit para asegurarse de que no viva después de que se haya liberado el objeto.