Swift循环变量/范围的持久性

时间:2015-10-19 18:55:13

标签: swift loops memory

所以这将是非常抽象的代码然而我正在做什么循环通过一个对象数组,调用一个辅助函数从json解析复杂对象并将其插入到数组中。我遇到的问题是,每次通过循环时,我解析的对象都不会被清除:

for item in parsedEvolutionList {
    if let abilityKey: String = item.allKeys[0] as? String{
        if let abilityData = item[abilityKey] as? NSDictionary{
            if var newAbility = EvolutionAbilityStore.SharedInstance.retreaveEvolutionAbilityByKey(abilityKey) {
                newAbility.parseFromJson(abilityData)
                if evolutionList == nil {
                    evolutionList = []
                }
                evolutionList?.append(newAbility)
            } else {
                log.warning("Atempting to parse EvolutionAbility and \(item) was not found in the store")
            }
        } else {
            log.warning("Atempting to parse EvolutionAbility and \(item) does not have data for ability to parse")
        }
    } else {
        log.warning("Atempting to parse EvolutionAbility and \(item) is formatted incorectaly")
    }
}

所以newAbility是一个数组,它包含第一个循环后第一个被解析对象的内容,第二个传递已经有第一个传递的内容,并添加第二个传递的内容,依此类推,然后当添加到进化列表时,它会添加另一个指向同一对象的指针,因此evolutionList中的所有对象最终都成为同一指针的对象。为什么newAbility会在循环迭代中持续存在?这对我如何干扰范围界定没有意义

1 个答案:

答案 0 :(得分:0)

哦,哦,哦,这个对象的创建来自一个单例,它确实存在于设计中......与循环中数据的感知无关!