gpt4 book ai didi

ios - Swift 闭包内存使用

转载 作者:行者123 更新时间:2023-11-28 14:11:30 27 4
gpt4 key购买 nike

使用闭包会导致内存压力和应用程序因内存问题而被调试器终止。这是我定义的简单闭包,并将其作为参数传递给不同的函数。如果我在闭包中需要的地方用两行代码替换闭包,内存压力就会消失。这个传递给函数的闭包会无限期地保留参数中传递的 outputPixelBuffersampleBuffer 吗?

let videoProcessor: (CMSampleBuffer, CVPixelBuffer) throws -> Void = { (sampleBuffer, outputPixelBuffer) in
if let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer), CFGetTypeID(imageBuffer) == CVPixelBufferGetTypeID() {
do {
try delegate.processPixelBuffer(self, inputPixelBuffer: imageBuffer, toPixelBuffer: outputPixelBuffer)
} catch {
fatalError("Failed processing pixel buffer")
}
}
}

最佳答案

您正在捕获对 self 的强引用,从而导致循环。在闭包的参数前加一个捕获列表——[weak self],然后里面就可以include了

let strongself = self

然后用 strongself 替换所有对 self 的引用(即使当前是隐式的)。我所使用的设备并不方便我直接编辑您的代码,但这应该可以。

关于ios - Swift 闭包内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com