Objective-Cを勉強してみる
Xcodeを使ってみようと思って、Xcodeを起動してiPhoneSDKのサンプルを覗いてみた。
.mな拡張子のファイルがあって、Matlab!!?とか思いながら調べてみると、
どやらObjective-Cのファイルの拡張子は.mらしい。
wikipediaを眺めていると
メソッド呼び出しはメッセージ送信で行うらしい!
すげー!オブジェクト指向!!
ということで、勢いで勉強を始める。
本当はC言語
Objective-CはC言語の拡張。
どうやらコンパイラがObjective-CのコードをCのコードに変換するらしい。
追加された型や予約語も#defineやtypedefされているだけ。
マジか。それはビックリだ。
とりあえず、ここで一通り修行する。
メモ
@interface クラス名 : 親クラス名 { インスタンス変数宣言 } メソッド宣言 @end
なんだこれ?キモイ!><
- インスタンス変数はC++でいうところのprotected扱い!?
- ルートクラスを継承するのが基本。GCCはObject、CocoaではNSObjectというクラス
- ルートクラスを作ることもできるけどね。
- メソッド宣言がキモイ。
- (戻り値の型) メソッド名 : 引数のリスト ;
- -で始まるのがインスタンスメソッド、+から始まるのがクラスメソッド
- デフォルトの戻り値はid型(オブジェクトを表す汎用型)
- 宣言と実装は完全分離
@implementation クラス名 メソッド定義 @end
- Objective-Cにはnewとかない。インスタンス作成もクラスが行う。
- 通常はルートクラスのallocというクラスメソッドでインスタンスを生成する。
- allocの戻り値はid型。
- allocがクラスの宣言情報からメモリを割り当てるらしい。すごい。alloc神。
- メソッドの呼び出しはメッセージ式で行う。キモイ。
- 動的らしい。よくわからんが。要勉強。
- 動的ゆえ、実行時にメソッドを検索するためCに比べてオーバーヘッドが倍以上らしい。
id obj = [Test alloc]; // Testというクラスのインスタンスobjを生成 [obj method]; // objのメソッドmethodを実行 // objを使い捨てにするなら次のようにも書ける [[Test alloc] method];
にゃるほどね。
風邪悪化
寝る