どうしてこんなことになったかと言いますと、
- iPadを営業ツールにすれば営業事務が楽になるはずなので会社で買った
- Wifiモデルしか手に入らないのでPocketWifiを買った
- 商品カタログと注文管理Webアプリのコンボで営業にGO
- 都内近郊は問題ないが地方でEmobileが相次いで討死。
- よろしい、ならばオフラインで動くアプリだ(←イマココ
まぁ何にせよWEBアプリではネイティブの操作性が表現できなかった。sencha touchっていうJSのライブラリがすごく良い感じだったんだけど、どうせiPadオンリーだしネイティブのほうが楽そうに感じたので。
で、Objective-cという開発言語に触れてみたんだけど、C言語のコンパイラのせいなのか発狂感涙する言語仕様だった。
以下、下記連載の内容を写経&読解したメモ。長くなりそうなので、ちょいちょい区切ってエントリ書く。僕が見た範囲では、Webにあるリソースでは最もわかりやすかった。
クラスの宣言と実装は別
// クラスの宣言 @interface MyTestClass : NSObject { MyClass *myclass; } - (void)show @end // クラスの実装 @implementation MyTestClass : NSObject -(void)show { print([myclass toString]); } @end
C言語殆ど知らないから、分けて何が面白いのバカなの死ぬのって思ったけど、C言語のヘッダーファイルとソースファイルの仕様を追従する為にこんなことになったのかなと勝手に納得した。
愛のメッセージを渡せ
あるオブジェクトのメソッドを呼び出したいときには、そのオブジェクトに対してメッセージを送るということらしい。それが[ ]で表現される。もちろんネストも可能。[Hoge hoge]init]doSomething]みたいな。
hoge.hoge().init().doSomething()って書けば100倍わかりやすい・・・。これでは流れるようなインターフェイスとか夢のまた夢なんじゃないの・・・。オブジェクト指向っぽいことしようよ・・・。
インスタンスは全部ポインタ変数
HogeClass *hogeClassみたいな。
クラス型の変数が常にポインタであることで、プログラム内での変数の受け渡し時に、常に同じ実体を指し示すことができるみたい。Objective-Cのメンバ変数は基本的にすべてインスタンス変数だって。
文字列定数
@をあたまについて""でくくると文字列定数というのになるんだって。引数で文字列渡すときに使っている例が多い。
[Myclass showName:@"gothedistance"]
Javaと同じでStringが不変オブジェクトだから同じ文字列の内容でもメモリ領域が違うからYOUたち気をつけろってことみたい。
プロパティとアクセサ
だんだん疲れてきた。
/* クラスの宣言部 */ @interface MyClass : NSObject { // インスタンス変数 int myInt; NSString *myStr1, *myStr2, *myStr3; } // プロパティの宣言 @property int myInt; @property (assign) NSString *myStr1, *myStr2; @property (retain, readonly) NSString *myStr3; @end /* クラスの実装部 */ @implementation MyClass // アクセサメソッドの生成 @synthesize myInt, myStr1, myStr2, myStr3; @endno title
無理矢理すぎてうける。
とりあえずここまで。