2017-01-15 5 views
-1

あなたのプログラムに保持サイクルが存在するかどうかを簡単に知る方法があるかどうかは疑問でした。また、タイプ(変数やクロージャなど)によっては、これらの保持サイクルがどこに存在するかを知っていれば、どうすればそれらを弱くすることができます。私は自分自身(私のGameScene)ですべての保持サイクルを停止して、もはやそれを必要としないときに割り当てを解除し、再起動したいと思う必要があります。保持サイクルがどこにあるかを知っていて、それらを削除する

ヒント、アドバイス、回答、フィードバックは非常に高く評価されます(具体的なコードと例が望ましい)。ありがとうございました。

編集: @ Sweeperの答えは、私が探していたものでした。あなたが同じ問題を抱えているなら、彼の答えは助けになるでしょう。ありがとう@スィイパー!

+1

ここでは、あなたの現在の問題に関するすべての回答があります:http://stackoverflow.com/a/41660653/3402095また、この質問に対する答えは、Appleのドキュメント、ARC - 「クラスインスタンス間の強い参照サイクル」セクション、Person&Apartmentの一部。 – Whirlwind

+1

デバッグヘルプ(「なぜこのコードは動作しませんか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

+0

@Whirlwind Sweeperの答えは、私がこの答えから知りたかったものではありませんでした。とにかくお返事いただきありがとうございます –

答えて

9

Xcode 8以上を使用している場合は、メモリグラフのthingyを使用して、どのオブジェクトがどのオブジェクトを参照しているかを確認できます。

メモリグラフを表示するには、まずXcodeでアプリケーションをビルドして実行します。左ペインで、このタブに移動し、あなたが作成したすべてのインスタンスが適切に破棄されているかどうかを確認したいときは:

enter image description here

enter image description here

を次にそこに右のボタンを押してください

enter image description here

:ビューメモリーグラフ階層 - その後

は、一番下のオプションを選択します

は今、それはあなたのメモリ内にあるすべてのオブジェクトが表示されます:私の場合は

enter image description here

を、私はGameSystemオブジェクト、6つのButtonNodeオブジェクトや他のいくつかを持っています。 GameSystemオブジェクトの横に少し!があることがわかります。つまり、このオブジェクトが流出したことを意味します。また、現在のシーンがTitleSceneであるため、GameSceneはもうメモリに存在しないはずです。インスタンスをクリックして、それを維持しているか見てみましょう:

enter image description here

今、あなたはそれが閉鎖によって保持されていることをはっきりと見ることができます!

これは、メモリグラフを使用して、弱参照をどこに置いて保持サイクルを避けるべきかを確認する方法です。

+0

素敵な答え...私はXcode 7.xで永遠に好きだったので、これを完全に忘れました。最新のバージョンに切り替えました。それは漏れの検出に関してはかなりうまくいくと思われます。また、これはSwift 2.3プロジェクトでは動作しません – Whirlwind

関連する問題