Objective-C/基本
ここでは、Objective-Cでプログラミングをする上での基礎知識をまとめてみました。
(Objective-C言語は基本がC言語なのでCを知っている方にとっては問題ないかと思います。)
コメントについて
Objective-Cのコメントは、行単位のコメントとブロック単位のコメントの2種類が書けます。
コメント記号 | 説明 |
---|---|
// | 行単位のコメントです。 「//」を書いた以降から行末までの文字はコメントとして認識されます。 |
/* xxx */ | ブロック単位のコメントです。 「/*」と「*/」で囲まれた部分はコメントとして認識されます。 |
ヘッダファイルとメインファイル
Objective-Cで特徴的なのが、1つのプログラムファイルがこのヘッダファイルとメインファイルの2つで構成されていることです。(OracleのPL/SQLなどを知っている方はイメージしやすいかと思います。)
ヘッダーファイルにはメンバー変数と、定義するメソッド名(引数なども含む)のみ定義しておいて、メインファイルにはメソッドを定義するといった感じでコーディングします。
メモリ解放について
ここではiPhoneOS上のObjective-Cについて解説しますが、iPhone上でのObjective-Cでは、ガーベジコレクションのようなメモリの自動解放はやってくれませんので、手動で解放するロジックをコーディングする必要があります。
関連メソッド | 説明 |
---|---|
retain | オブジェクトを確保する 対象オブジェクトが必要な場合はretainで確保しておく |
release | オブジェクトを解放する 対象オブジェクトが不要になった場合はreleaseで解放する |
autorelease | オブジェクトの解放は自動でされる |
メモリ解放についての基本的な考え方は以下の通りです。
- [[xxx alloc] init]; のようにオブジェクトを生成した場合はreleaseが必要。
- [[[xxx alloc] init] autorelease]; のようにオブジェクトを生成した場合はreleaseは不要。
- [[xxx alloc] initWith~]; のようにオブジェクトを生成した場合はreleaseが必要。
- [[xxx alloc] xxxWith~]; のようにオブジェクトを生成した場合はreleaseは不要。
(autoreleaseされる)
メソッドの書き方
Objective-Cでのメソッドの書き方は、他の一般的な言語に比べて特殊です。(個人的意見ですが・・)
まずは同じ処理をするJavaとObjective-Cのメソッドを比べてみます。
// Java
private String getAppendValue(String str1, String str2){
return str1 + str2;
}
// Objective-C
-(NSString*) getAppendValue:(NSString*)str1 appendStr:(NSString*)str2{
return [str1 stringByAppendingString:str2];
}
どうでしょうか?引数の書き方が全然違いますね。
一般的な言語では、引数は括弧の中にカンマで区切って羅列していくものが多いと思いますが、Objective-Cでは、引数1つ1つに引数名(上の例だと「appendStr」の部分です。)をつけて、スペースで区切って羅列していきます。
他の言語に慣れている方は、ちょっととっつきにくいかもしれません。
メソッドの呼び出し方
メソッドの呼び出し方も変わっています。
JavaとObjective-Cのメソッドの呼び出し方を比べてみましょう。
// Java
String str = calc.getValue();
// Objective-C
NSString *str = [calc getValue];
どうでしょうか?Javaではオブジェクト変数にピリオドで区切ってメソッドを書くことでメソッドの呼び出しになりますが、Objective-Cでは、オブジェクト変数とメソッドはスペースで区切り、それをさらに括弧"["と"]"で囲うことによりメソッドの呼び出しになります。
※厳密に言えば、Objective-Cではメソッドの呼び出しという概念は無く、メソッドの通知をすることでメソッドを実行します。
まあ、これも慣れが必要ですね。