在Swift中,我注意到没有
@autoreleasepool{}
结构,尽管Swift使用ARC。在Swift中管理自动释放池的正确方法是什么,或者由于某些原因已被删除?@autoreleasepool{}
结构,尽管Swift使用ARC。在Swift中管理自动释放池的正确方法是什么,或者由于某些原因已被删除?语法如下:
autoreleasepool {
/* code */
}
很遗憾,苹果公司的WWDC 2014视频似乎不再可用。如果它回来了,那么它是在WWDC 2014会议视频编号418“使用Instruments改进您的应用程序”中介绍的。
Swift文档目前没有实用的内容。但是,在Obj-C运行时参考中可以找到大量有用的信息,如NSAutoreleasePool和高级内存管理编程指南。
注意:自动释放池今天已经不像过去那样重要。现代代码应使用自动引用计数,它根本不使用释放池。但是,截至2021年,仍有许多遗留代码(包括苹果的框架)使用自动释放池。例如,如果您正在对图像执行任何类型的批处理,则可能应使用autoreleasepool
块。
{
必须和autoreleasepool
保持在同一行,否则您需要用圆括号( )
将其包裹起来。说实话,这真的让我很烦恼... - Erikreturn { ... }
时,在 JavaScript 中也会出现类似情况。 - Cezary WojcikDeveloper.app
应用程序。 - Ben Butterworth只是提供信息,Xcode构建的完整代码如下:
autoreleasepool({ () -> () in
// code
})
猜测括号确定函数的闭包。
autoreleasepool {
Do things....
}
我在我的代码中使用了这种结构。这个函数是从视频URL创建缩略图图片。
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!)
}
}