我在主套装中使用属性列表来存储关于关卡和玩家的信息。第一次启动应用程序时,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
我强行将每个数据转换为正确的数据类型,并在整个关卡中使用它。
以下是Instruments中泄漏对象的屏幕截图。有没有其他人有这个问题或有任何想法如何阻止泄漏?
答案 0 :(得分:1)
提供所有泄露的对象并没有太大帮助。您需要做的是查看与每个泄漏对象相关的调用树。这将显示泄漏源自代码的位置。从那里你可以开始推断需要做些什么来补救它。
你应该读这个。它已过时,但它讨论了调用树。
https://www.raywenderlich.com/2696/instruments-tutorial-for-ios-how-to-debug-memory-leaks