这里是一个例子:
async/await
记忆一直升至220MB,这对我来说太多了。
通常,您可以将内部循环包裹在一个
func getImage() async -> NSImage? {
return NSImage(named: "imagename") // Do some work
}
Task {
// This leaks
for _ in 0 ..< 1000000 {
let image = await getImage()
print(image!.backgroundColor)
}
}
中,并且可以解决问题,但是当我使用
autoreleasepool
函数尝试时,我会得到此错误:
async
有什么办法解决的?还是有另一种方法可以实现相同的目标,即释放循环内部的可可对象?
@@couchdeveloper提到要包裹
Cannot pass function of type '() async -> ()' to parameter expecting synchronous function type
getImage
,因为它有自己的Task
,而且似乎有效!恰恰更改
autoreleasepool
func getImage() async -> NSImage? {
return NSImage(named: "imagename") // Do some work
}
基于@CouchDeveloper和您自己的答复,您可以使用这些全局功能覆盖:
func getImage() async -> NSImage? {
await Task {
return NSImage(named: "imagename") // Do some work
}.value
}