Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

222
Visualizações
¿Cuáles son los efectos de nunca llamar al controlador de finalización de una función?

¿Qué sucede si nunca llama al controlador de finalización? ¿Hay algún efecto secundario? Supongo que puede haber una pérdida de memoria, pero no puedo encontrar ninguna documentación.

 func completeMe(completionHandler: @escaping (String?) -> Void) { return }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Fundamentalmente, no hay nada especial en un "controlador de finalización". Es solo una función.

Si tienes una función:

 func f() { print("Hello, world") }

y no lo llamas, ¿qué pasa entonces? Bueno, no pasa nada .

Ahora, ¿cuáles son las implicaciones de eso? Como mencionó rmaddy, si una función tiene una finalización, las personas que llaman ciertamente esperan la invocación de esa finalización. Es inusual, en el mejor de los casos, que una función tome una finalización y que a la persona que llama no le importe si la finalización se ejecuta alguna vez.*

Imagine que la función es llamada por un controlador de vista que inicia un indicador de actividad antes de llamar, y luego, al finalizar, detiene el indicador. Si nunca se llama a la finalización, entonces el indicador nunca deja de girar.

Fundamentalmente, eso es todo. Si no se llama a la finalización, su código no se ejecuta . Los efectos de eso dependen completamente de lo que sucede en el código en y alrededor de la finalización.


De acuerdo, mencionaste la memoria... Muchas veces, un controlador de finalización será una función anónima. En ese caso, hay un objeto creado. Pero está sujeto a las mismas reglas de administración de memoria que cualquier otro objeto. No hay fuga solo porque no se llama. Si completeMe se ve así:

 func completeMe(_ completionHandler: (String) -> Void) { completionHandler("Hello, world") }

y lo llamas así:

 completeMe({ self.detailLabel.text = $0 })

Entonces, el objeto creado para la función anónima no pasa cuando completeMe regresa. Si almacena la función anónima:

 func completeMe(_ completionHandler: @escaping (String) -> Void) { self.handler = completionHandler // Do other things }

Entonces sucede lo mismo que con cualquier otro objeto: la función anónima vive hasta que esa propiedad se establece en otro valor (dado que nada más tiene una referencia a ella) .

Y si pasas una función con nombre,

 func takeAString(_ s: String) { print(s) } completeMe(takeAString)

el tiempo de vida de takeAString ya es el tiempo de vida del programa; no hay implicaciones de gestión de memoria aquí.

Si pasa un método de instancia, la administración de la memoria es la misma que si hubiera pasado la instancia misma.


* En general, si es posible que falle, a) tendrías una segunda finalización "fallida" o b) la finalización indicaría falla a través de su argumento.

over 4 years ago · Santiago Trujillo Relatório

0

Dado que el parámetro se llama completionHandler , la persona que llama asumirá que se ejecutará, pase lo que pase.

Entonces, para responder a su pregunta, no habrá efectos secundarios inherentes, pero podría considerarse una mala práctica.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda