2016-10-11 7 views
0

メインバンドルのプロパティリストを使用して、レベルとプレーヤーに関する情報を保存しています。アプリが最初に起動されたときにpListが電話にコピーされた後、そのローカルコピーから必要に応じて情報にアクセスします。私はInstrumentsでLeaksを実行しています。また、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

ありがとう、これは役に立ちますが、私はこれらのリークのいくつかについて何かできることは確信していません - それらの多くは '' let let '' 'から始まっていましたdictionaryForPlist = NSMutableDictionary(contentsOf:path){'いくつかは配列に追加してplaySoundFileNamedアクションを設定しています。 – claassenApps

+0

誰かが 'if let dictionaryForPlist = NSMutableDictionary(contentsOf:path)'によって作成された辞書をまだ保持しています。あなたはテストとして、plistを得るメソッドの呼び出し側に辞書をコピーさせることができます。とにかく、コールツリーなしで、それはすべての投機です。あなたは、保持されたオブジェクトがどのように働くか、そしてこれを推論する方法をより良く理解する必要があります。それはあなたのコードベースなので、外部から見えるものは見えません。あなたのコメントのために –

+0

ありがとう。私は、保持サイクルを特定し、それらの多くを削除したが、明らかにすべてではないハングを取得し始めている。私はこのための保持経路は見当たりませんでしたが、私はそれをもう一度見ていきます。また、コールツリーの1つのスクリーンショットをつかんで質問に投稿しようとします。 – claassenApps

関連する問題