En Swift, noto que no hay @autoreleasepool{}
construcción, aunque Swift usa ARC. ¿Cuál es la forma correcta de administrar un grupo de liberación automática en Swift o se ha eliminado por algún motivo?
76
En Swift, noto que no hay @autoreleasepool{}
construcción, aunque Swift usa ARC. ¿Cuál es la forma correcta de administrar un grupo de liberación automática en Swift o se ha eliminado por algún motivo?
Respuestas:
Esto se explica en detalle en el video número 418 de la sesión de la WWDC 2014 "Mejorando su aplicación con instrumentos", que también puede descargar como PDF.
Pero en resumen, la sintaxis es:
autoreleasepool { /* code */ }
fuente
{
debe estar en la misma línea queautoreleasepool
, de lo contrario, debe envolverlo( )
. Eso realmente me molesta para ser honesto ...autorelease
es una función que toma un cierre como argumento. Este es un ejemplo de la sintaxis abreviada de cierre como último argumento.{
en una nueva línea en lugar de justo después?return { ... }
.Solo para su información, Xcode construyó el código completo de la siguiente manera:
autoreleasepool({ () -> () in // code })
Supongo que el paréntesis identifica el cierre de funciones.
fuente
¡Ahi esta! En realidad, no se menciona en ninguna parte.
autoreleasepool { Do things.... }
fuente
Usé este tipo de estructura en mi código. Esta función es crear una imagen en miniatura a partir de la URL del video.
func getThumbnailImage(forUrl url: URL) -> UIImage? { return autoreleasepool{ () -> UIImage in let asset: AVAsset = AVAsset(url: url) let imageGenerator = AVAssetImageGenerator(asset: asset) var thumbnailImage: CGImage? do { thumbnailImage = try imageGenerator.copyCGImage(at: CMTimeMake(value: 1, timescale: 60) , actualTime: nil) return UIImage(cgImage: thumbnailImage!) } catch let error { print(error) } return UIImage(cgImage: thumbnailImage!) } }
fuente