2016-10-11 2 views
0

내 번들의 속성 목록을 사용하여 레벨 및 플레이어에 대한 정보를 저장하고 있습니다. 앱이 처음 시작될 때 pList가 전화로 복사 된 다음 필요에 따라 해당 로컬 복사본에서 정보에 액세스합니다. 저는 Leaks in Instruments를 운영하고 있으며, pList에 저장된 사전 및 기타 데이터 유형을 생성하는 것과 관련되어 있다고 생각되는 메모리 누수에 대해 계속 설명합니다.속성 목록/NSMutableDictionary를 사용한 메모리 누수

다음은 사전이 생성되는 경우입니다 - 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 

나는 강제로 올바른 데이터 유형으로 데이터의 각 부분을 캐스팅하고 레벨을 통해 그것을 사용할 수 있습니다. 여기

인스트루먼트의 유출 오브젝트의 화면이다. 다른 사람이이 문제가 있거나 누출을 막을 수있는 방법이 있습니까?

+0

애플 SpriteKit 포럼에 메모리 누수에 대한 몇 가지 질문이 있습니다. 이것은 내가 사전으로 본 첫 번째입니다. 운이 좋을 수도 있습니다. 이걸 처음으로 찾는다. SK와 버그 .... – Confused

답변

1

누출 된 모든 개체를 제공하는 것은 지나치게 도움이되지 않습니다. 당신이해야 할 일은 각 누출 된 객체와 관련된 호출 트리를 보는 것입니다. 그러면 코드에서 누수가 발생한 위치가 표시됩니다. 그리고 거기에서 당신은 그것을 치료하기 위해해야 ​​할 일을 추론하기 시작할 수 있습니다.

이 내용을 읽어야합니다. 그것은 날짜가 있지만 호출 트리에 대해 설명합니다.

https://www.raywenderlich.com/2696/instruments-tutorial-for-ios-how-to-debug-memory-leaks

+0

고마워, 이것은 도움이되지만, 내가 누출에 대해 할 수있는 일이 있는지 모르겠다 - 그것들 중 많은 것들이 if from dictionaryForPlist = NSMutableDictionary (contentsOf : path) {' 몇몇은 배열에 추가하고 playSoundFileNamed 액션을 설정합니다. – claassenApps

+0

누군가가'if let dictionaryForPlist = NSMutableDictionary (contentsOf : path)'에 의해 생성 된 사전을 아직 잡고 있습니다. 시험으로 plist를 얻는 메소드의 호출자에게 사전을 복사하게 할 수 있습니다. 어쨌든, 호출 트리없이 모든 추측입니다. 유지 된 객체가 어떻게 작동하는지 이해하고이를 추론하는 방법을 더 잘 이해할 필요가 있습니다. 코드베이스이므로 외부에서 볼 수 없습니다. 의견을 보내 주셔서 감사합니다. –

+0

보존주기를 확인하고 많은 것을 제거하기 시작했습니다.하지만 분명히 모든 항목을 제거한 것은 아닙니다. 이것에 대한 보존 경로를 보지 못했지만 다시 살펴 보겠습니다. 또한 콜 트리 중 하나의 스크린 샷을 캡처하여 질문에 게시하려고합니다. – claassenApps