В настоящее время в моем коде имеется сильный цикл ссылок, который на графике памяти выглядит следующим образом:
Я отфильтровал вероятность того, что ямне не хватает [слабого я], и я считаю, что это еще один экземпляр, который захватывается показанным замыканием (замыкание № 3, которое снова и снова появляется в просочившихся узлах SKSpriteNode, относящихся к моему классу «Круг»).
У меня есть круги типа Круг, захваченные в замыканиях в разных местах.Например:
let sprite = circle.sprite!
let changeTextureAction = SKAction.run
{
sprite.texture = newTexture
if circle.bonusCircleType == .bonus4 || circle.bonusCircleType == .bonus2x
{
let oldArrowSprite1 = sprite.childNode(withName: "arrowSprite1")
oldArrowSprite1?.removeFromParent()
let oldArrowSprite2 = sprite.childNode(withName: "arrowSprite2")
oldArrowSprite2?.removeFromParent()
let (arrowSprite1, arrowSprite2) = getArrowSprites(circle)
sprite.addChild(arrowSprite1)
sprite.addChild(arrowSprite2)
sprite.removeAction(forKey: "animateCircle")
}
else if circle.bonusCircleType == .bomb
{
let bombLeftEmitter = sprite.childNode(withName: "bombLeftEmitter")
bombLeftEmitter?.isPaused = false
let bombRightEmitter = sprite.childNode(withName: "bombRightEmitter")
bombRightEmitter?.isPaused = false
let bombTopEmitter = sprite.childNode(withName: "bombTopEmitter")
bombTopEmitter?.isPaused = false
}
}
sprite.run(SKAction.sequence([SKAction.wait(forDuration: time), SKAction.group([changeTextureAction, expandUpAction, Assets.sharedInstance.fxMatch4]), expandDownAction2]), withKey: "animateNewBonusCircle")
Есть ли хороший способ для меня избежать сильного захвата круга замкнутым кругом, не считая его непризнанным или слабым?Вполне возможно, что круг мог быть освобожден до этого закрытия, и в этом случае я получаю крах (или со слабым сильным танцем, то, чего я хочу, не происходит - предположим, у меня есть другие функции, где я хочуиспользуйте, скажем, положение круга, даже если он, возможно, только что удален).
Моя первоначальная мысль состояла в том, чтобы я мог заменить другой объект теми же свойствами, которые я мог бы установить как слабые, но не был уверен в этом.Синтаксис для управления этим.
Ниже приведен скриншот моих данных о распределении, если он дает кому-нибудь подсказку относительно того, с чем я имею дело.Я с подозрением относился к этому вызову, чтобы добавить заголовок карты, и в распределениях указывается, что он использует 542 МБ памяти, но когда я его удалил, это, похоже, не восстановило мне много использования памяти.Я предполагаю, что это был только первый экземпляр, в котором был назван синглтон моего актива, который содержит атласы текстур для моей игры.Теперь я думаю, что, возможно, сами атласы по какой-то причине не освобождены, но я фактически вручную освобождаю их в коде.Argh.Любые мысли приветствуются.