回答編集履歴
2
追加
test
CHANGED
@@ -32,4 +32,6 @@
|
|
32
32
|
|
33
33
|
|
34
34
|
|
35
|
-
おそらくappDelegate.cpp中で前のシーンオブジェクトがメインルーチンから抜けるまで破棄されないので,メモリが解放できていないのだと思います。シーンオブジェクトが解放されてもシーンオブジェクトのメンバのメモリまで解放されているとは限らないので,シーンを抜ける時はデストラクタでやサブルーチンをブレイクする段階で全てのオブジェクトの参照カウントが0になることを保証しておいたほうが安全だと思います。
|
35
|
+
おそらくappDelegate.cpp中で前のシーンオブジェクトがメインルーチンから抜けるまで破棄されないので,メモリが解放できていないのだと思います。シーンオブジェクトが解放されてもシーンオブジェクトのメンバのメモリまで解放されているとは限らないので,シーンを抜ける時はデストラクタでやサブルーチンをブレイクする段階で全てのオブジェクトの参照カウントが0になることを(AutoReleasePool::clear()をループで実行するなどして)保証しておいたほうが安全だと思います。
|
36
|
+
|
37
|
+
|
1
情報追加
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
また,AutoReleasePoolを使用する場合,インスタンスの初期化時にautorelease()メソッドを呼んでおく必要が有ります。
|
13
|
+
また,AutoReleasePoolを使用する場合,インスタンスの初期化時にautorelease()メソッドを呼んでおく必要が有ります(これはcocos2d-xのコンストラクタをオーバーライドしていなればcreate()実行時に自動で呼ばれます)。
|
14
14
|
|
15
15
|
|
16
16
|
|
@@ -19,3 +19,17 @@
|
|
19
19
|
|
20
20
|
|
21
21
|
を参考にしてください。ただ情報が古いため,もしかするともっと良い機能に置き換えられている可能性があります。メモリが解放されていない根本的な原因は,オブジェクトのreleaseが上手くできていないことなので,それを解決するようにメソッドや処理などを書くことで解決します。
|
22
|
+
|
23
|
+
以下の記事も参考になります。
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
[cocos2d-xのリファレンスカウンタを理解してクラッシュやメモリリークを防ぐ](http://brbranch.jp/blog/201311/cocos2d-x/cocos2dx_memory_leak/)
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
ちなみに[removeFromParentAndCleanup(true)](http://www.cocos2d-x.org/reference/native-cpp/V3.0alpha0/d3/d82/classcocos2d_1_1_node.html#a56ae8e6cfb617d66b934e10dfc6f2bdc)はスプライトの参照カウントを-1して,スプライトなどに設定されているアクションなどを消すメソッドで,参照カウントが0になっていればそのオブジェクトは削除されますが,明示的にメモリを解放しているわけではありません。リンク先の公式ドキュメントが一番わかりやすく正しい情報が載っていると思うので,参考にしてください。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
おそらくappDelegate.cpp中で前のシーンオブジェクトがメインルーチンから抜けるまで破棄されないので,メモリが解放できていないのだと思います。シーンオブジェクトが解放されてもシーンオブジェクトのメンバのメモリまで解放されているとは限らないので,シーンを抜ける時はデストラクタでやサブルーチンをブレイクする段階で全てのオブジェクトの参照カウントが0になることを保証しておいたほうが安全だと思います。
|