Ios 使用属性列表/NSMutableDictionary的内存泄漏

Ios 使用属性列表/NSMutableDictionary的内存泄漏,ios,swift,memory-leaks,sprite-kit,property-list,Ios,Swift,Memory Leaks,Sprite Kit,Property List,我在主捆绑包中使用属性列表来存储有关级别和玩家的信息。第一次启动应用程序时,pList被复制到手机上,然后我根据需要从本地副本访问信息。我在仪器中运行泄漏,我不断遇到内存泄漏,我相信这些泄漏与创建字典和pList中存储的其他数据类型有关 这里是创建字典的地方-找到pList的路径后: if fileManager.fileExists(atPath: path.path) { if let dictionaryForPlist = NSMutableDictionary(content

我在主捆绑包中使用属性列表来存储有关级别和玩家的信息。第一次启动应用程序时,pList被复制到手机上,然后我根据需要从本地副本访问信息。我在仪器中运行泄漏,我不断遇到内存泄漏,我相信这些泄漏与创建字典和pList中存储的其他数据类型有关

这里是创建字典的地方-找到pList的路径后:

if fileManager.fileExists(atPath: path.path) {

    if let dictionaryForPlist = NSMutableDictionary(contentsOf: path) {

        return(dictionaryForPlist)
    }
    else {
        print("pList not found")
    }

let levelInstanceData = LevelData() //this class searches the main bundle for the plist and stores the pList as an NSMutableDictionary
let currentLevel = levelInstanceData.localDataFile["Level1"] as! Int //localDataFile is the NSMutableDictionary storing the information
let levelName = levelInstanceData.localDataFile["Level1Name"] as! String
我强制将每一条数据转换为正确的数据类型,并在整个级别中使用它


这是仪器中泄漏物体的截图。有没有其他人遇到过这个问题,或者知道如何阻止泄漏?

提供所有泄漏的对象并没有太大帮助。您需要做的是查看与每个泄漏对象相关的调用树。这将向您显示代码中泄漏的来源。从那里你可以开始推断需要做些什么来补救它

你应该看看这个。它已注明日期,但它讨论了调用树


苹果SpriteKit论坛上有几个关于内存泄漏的问题。这是我第一次看到字典。你可能很幸运。第一个找到这个的。SK和Bug…谢谢,这很有帮助,但我不确定我能对其中的一些泄漏做些什么-很多泄漏源于
,如果让dictionaryForPlist=NSMutableDictionary(contentsOf:path){
还有一些是通过附加到数组和设置playSoundFileNamed操作创建的。如果让dictionaryForPlist=NSMutableDictionary(contentsOf:path),则仍有人持有由
创建的字典
。作为测试,您可以让获取plist的方法的调用方复制字典。无论如何,没有调用树,这都是推测。您需要更好地了解保留对象是如何工作的,以及如何推断这一点。这是您的代码库,因此外部用户无法看到您看到的内容。谢谢您的评论。我是beginn我正在尝试获取识别保留周期的挂起,并删除了很多保留周期,但显然不是所有保留周期。我没有看到这方面的保留路径,但我会再次研究它。我还会尝试抓取一个调用树的屏幕截图,并将其发布到问题中。此问题的更新-内存泄漏发生在运行iOS1的设备上0,但没有一个运行iOS9。这应该意味着导致内存泄漏的不是我的代码,对吧?