この本に書かれていた
CC_SYNTHESIZE_RETAIN
他のサイトでも、これで使用した変数は自動的にretain()とrelease()を実施してくれるとかなんとか。
正直retain()とrelease()もはっきりわかってるわけでないのですが、
共通変数的な使い型が出来て、CC_SYNTHESIZE_RETAINって便利だなぁぐらいに思っておりました。
今回ハマったのは上の本にのってない、ui:PageViewをCC_SYNTHESIZE_RETAINで定義してしまい。
setとかgetとかイマイチわかってなかったので(プロパティってなに?)
宣言した変数にに対してこんな感じで書いてしまっていて
1 |
_pageView = ui::PageView::create(); |
そしてこれが画面を表示したときにはエラーにならない
違う画面(クラス)に移動した際にアプリが落ちるだけ(しかも違うクラスのソースでエラーになる)
消去法で原因を特定したのですが、いまいち意味がわかってなかったので
CC_SYNTHESIZE_RETAINでググったところ
あとCCObjectを安全にセットできるCC_SYNTHESIZE_RETAINがある。
これはsetFunc()した場合、
1)中で前まで所持してたものをrelease()し、続いて
2)新しくセットするものをretain()してくれる仕組みになってます。
cocos2dxで使いそうなマクロまとめ
・・・
良く見たら今まで使っていたLabelやらSpriteやらは全部Setで設定してたので
以下のように書き直したら動きました。
1 |
this->setPageView(ui::PageView::create()); |
ですが、検証中に
.hファイルにて
CC_SYNTHESIZE_RETAINではなく
1 2 |
cocos2d::ui::PageView * _pageView; //CC_SYNTHESIZE_RETAIN(cocos2d::ui::PageView *,_pageView,PageView); |
と書いたら動いたので、わざわざこれに書き換える必要性とか、、、
は今後勉強していこうと思います。
ブログかきました!// 【cocos2d-x】CC_SYNTHESIZE_RETAINでハマった件【C++】: http://t.co/USZlbeTI5i