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]
может вызвать утечку памяти?Это не вложенное замыкание, захват выглядит нормально ... Кроме того, почему использование [unowned self]
может это исправить?