gpt4 book ai didi

swift - 快速[弱 self ]引起的内存泄漏

转载 作者:行者123 更新时间:2023-11-28 07:40:44 25 4
gpt4 key购买 nike

func addAdditionalElement(_ additionalSelectedElementsIDs: [String], startX: CGFloat, containerView: UIView, viewHeight: CGFloat) -> CGFloat {
var totalWidth = startX

if additionalSelectedElementsIDs.count > 0 {

let paddingBeforeLabel = (totalWidth==0 ? 0:paddingBetweenLabels)
totalWidth += paddingBeforeLabel
var countLabel = createLabel("+\(additionalSelectedElementsIDs.count)", shouldStrikethrough: false)
if let filter = filter as? DsFilter {
if filter.isRAOptimization() {
countLabel = createLabel("...", shouldStrikethrough: false)
}
}
countLabel.frame = CGRect(x: totalWidth, y: 0, width: countLabel.frame.size.width, height: viewHeight)
countLabel.layer.cornerRadius = countLabel.frame.size.height / 2
addLabel(countLabel, containerView: containerView)
DispatchQueue.main.async { [weak self] in
guard let isSubset = self?.filter.isSelectedElementsSubset(elementsIDs: additionalSelectedElementsIDs) else { return }
self?.updateLabelSelectedState(countLabel, isTemporarySelected: !isSubset)
}
totalWidth += countLabel.frame.size.width
}
return totalWidth
}

通过仪表在 DispatchQueue.main.async { [weak self] in管路中发现泄漏。它可以通过使用 [unowned self]来修复,但我不能保证零的情况。
我只是好奇内存泄漏的原因,为什么会导致内存泄漏?这不是嵌套的闭包,捕获看起来很好。。。
另外,为什么使用 [weak self]可以解决这个问题?

最佳答案

“弱”引用应该比“无主”引用占用更多资源。在运行时,当每周引用的对象被解除分配时,会有一个将指向此对象的“弱”指针重置为“nil”的过程。另一方面,“无主”指针没有像这样被跟踪。

关于swift - 快速[弱 self ]引起的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52328893/

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