Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2010-04-19

[iPhone]iPhone RPG開発ログ6

日本語のキャラ名をLuaから渡したら文字化けしてる。 問題は下記コード。

character_name.text = [NSString stringWithFormat:@"%s", active_character()->name];

こういう場合はstringWithFormatを使わずにinitWithUTF8Stringを使ってC言語の文字列からNSStringを生成すればいいようだ。

NSString *str = [[NSString alloc] initWithUTF8String:active_character()->name];
character_name.text = str;
[str release];

これで動いたのだが、strをreleaseしてしまっていいのか? 代入した時点で値が新たに生成されるのだろうか。 明らかにまずいけどたまたま動いているだけ?

パフォーマンスツールでメモリリークを監視すると、上記コードは問題なく動いているように見える。 releaseをコメントアウトするとメモリリークが確認できる。

次のようにすればreleaseが不要になるのかな。

character_name.text = [NSString stringWithCString:active_character()->name encoding:NSUTF8StringEncoding];

init〜系は極力使わないようにするのがいいのかな。参考: http://konton.ninpou.jp/program/cocoa/memory.html

リファレンスカウンターか。はっきりとはわからないがリファレンスカウンターをイメージしながらコーディングしてれば、そのうちわかってくるだろう。

開発環境でデバイスでのプログラム起動もう少し早くならないかな。 今はビルド済みのプログラムが起動するまでに7秒くらいかかる。1秒くらいならいいのに。

念のため現状のコードでメモリリークが起きていないかパフォーマンスツールでチェック。問題ないようだ。

アクティブキャラ情報の表示。

  • キャラクター名
  • アクティブキャラクターの経験値
  • 「次のレベルまで0123456」

レイアウトが微妙なので修正。

todo

  • 性別を表すパラメータとその変数名
  • メインパネルにキャラ以外の画像を表示
  • キャラの名前変更
  • ○キャラ名の文字化け
  • ○アクティブキャラ情報の表示
  • ○lua_closeをどこかで呼ぶこと ... 参考: http://karetta.jp/book-node/lua/228837