読者です 読者をやめる 読者になる 読者になる

TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

Titanium用のモジュール書くためにObjective-Cについて腰を据えて学んでみた

仕事のからみで、Titanium用のGoogle Analytics for iOSが今後必要になりそうだったのでモジュール作りはじめてGitHubに公開しつつ折角なのでTitanium用のモジュール作りのはじめの一歩的な内容Qiitaに投稿しました

とりあえず、起動時にトラッキング出来るようにはなったのですが、イベントのトラッキング処理の所がうまくいかず、Objective-Cについて体系だって学んでなかったので腰を据えて取り組むことにしました。

想定してる人

  • Titaniumでアプリをひと通り開発したことがある。
    • 理想は自分のアプリを作ったことがある人のほうがよりしっくり来る内容だと思います
  • Titaniumで利用できるAPIについてはおおまかに把握してる
    • 具体的には標準のAPIでどんなことが実現できるのか全体を把握してるという意味
    • 細かい使い方は調べながら利用できる
  • C言語C++Javaなどの静的型付け言語の経験がほとんど無い

やってみたこと

最初はクラスメソッドさんのStoryboardでUITableViewを実装し理解するを見ながら写経してました。

写経してたら途中途中でわからないことが意外と多かった・・

例えば

@property (nonatomic, strong) NSArray *dataSourceiPhone;
@property (nonatomic, strong) NSArray *dataSourceAndroid;

というのが出た場合に

  • nonatomicとかstrongとかってどういうことなんだろ??
  • *dataSourceAndroidの先頭のアスタリスクつけるのは何故?

と割と細かい所で立ち止まってしまうことが結構ありました。

UITableView使って、動作するものは出来たのですがこの程度の理解だと今後考えるとちょっとダメだなと考えて、実装を進めるのは一旦保留してまずはObjective-C自体についてもう少し理解を深めることを優先することにしました。

理解を深めるのに実践したこと

@ITのiOS SDKで始めるObjective-C入門はボリュームがちょうど良かったのでこれを見ながら写経しました。

特に

の所はすごく腹落ちした所があり、自分としてはすごくわかりやすい解説でした。

実践した後の気付き

メソッド名の書き方がわかりづらいと思っていたけど、上記@ITの記事見てたらこれは自分だけではなさそうっていう気付きを得られました。また、nonatomicの対比として、atomicがあることを知ったことで、

「あー、nonatomicって、 nonatomicってことだったのか」

という気付きも得られました。

プロパティのstrong/weakの使い分け

はるか昔にWSH/VBScriptでゴリゴリコード書いていた時に値渡し/参照渡しみたいな概念がある程度頭にあったので、copyが文字とおりコピーするっていうのはすぐに理解出来たのですが、strong/weakがそれぞれ強い参照と弱い参照っていったいどういうことって正直最初しっくり来ませんでした(T_T)

Objctive-Cにおけるプロパティ属性まとめ。正直、weakとかって使いどころが分かりづらいですよねーという記事を読んでて途中のメモリリークあたりを読んでるうちにようやくそれぞれの存在意義が理解出来てきました。

まとめ

  • TitaniumでiOSアプリ開発やっていたし、Objective-Cの基礎的なことはわかってるから・・という傲慢な姿勢は良くなかった。
  • 何事にもまずは謙虚にやるべきと反省。
    • とはいえベースの知識はあるので、変数の概念とか制御文の基礎的な所はある程度読み飛ばしつつ、Objective-C固有の概念の所は難しく感じそうになってもめげずに理解を深めるように意識するのが大事
  • 1つの情報源にあたっていて、理解が進まないようなら他のサイト(状況によっては書籍など)を参考にしながら学習をする
  • 学習していたつまづいた所は面倒でもこうやってブログにまとめることで理解の甘い所について改めて理解できる
    • こうやって書いててもアスタリスク付く所のやつはまだしっかり勉強してないからよくわかってない(^_^;)