0

CCSceneメソッドを使用して CocosBuilder テンプレートから作成されたノードを 1 つだけ含む単純なものがあります[CCBReader nodeGraphWithFile:]

これまでのところ、シーンのメソッドで ccb ノードを解放していませんでしたdealloc。しかし、割り当てプロファイラーで、シーンを数回プッシュ/ポップするとメモリリークが発生することに気付きましたCCDirector

releaseこのメモリ リークは、シーンのdeallocメソッド内のノードを実際に使用すると解消されます。

ノードを保持/初期化していないのに、なぜノードを解放する必要があるのですか? 私が誤解したことがありますか?

4

1 に答える 1

0

これによって作成されたオブジェクトはどうなりますか?

[CCBReader nodeGraphWithFile:]

それをretainプロパティに割り当てると、保持されます。したがって、明示的に解放する必要があります。例えば:

self.nodeGraph = [CCBReader nodeGraphWithFile:...];

が保持プロパティとして宣言されている場合nodeGraph、で作成された自動解放オブジェクト[CCBReader nodeGraphWithFile:]はプロパティによって保持されるため、で解放する必要がありますdealloc

これを、プロパティを使用してノードオブジェクトへの参照を保持せず、ノード階層に直接追加しないことと比較してください。

[self addChildNode:[CCBReader nodeGraphWithFile:...]];

この場合、オブジェクトを保持していないため、明示的なリリースを行う必要はありません。

于 2013-01-15T08:46:42.800 に答える