Objective-Cのプログラミングは、Mac OS Xの標準開発ツール「Xcode」を使用します。(テキストエディタとターミナルを使ってコマンドラインから開発することもできます)
Xcodeをインストールしていない人はObjective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成を読んでインストールしてください。
§1 Xcodeプロジェクト作成
[ファイル]⇒[New]⇒[Project]からプロジェクトを作成します。テンプレートは[Command Line Tool]を選択します。[Type]は[Foundation]を選択し、プロジェクト名などを入力して保存します。
[Use Automatic Reference Counting]というチェックがありますが、これはARCといって、オブジェクトのメモリ管理の仕組みを使うかどうかを設定するものです。(Objective-C 5.0から導入されました)
これを利用するとオブジェクトの管理が簡単になります。ここでは「ON」にして、ARCを使うことにします。
作成されたプロジェクトには、main関数が記述された[main.m]が自動的に生成されます。基本的にこのファイルを編集してプログラミングします。[.m]という拡張子はC言語でいうところの[.c]と同じで、ソースコードファイルを意味します。
§2 Objective-Cのコード例
さて、いきなりですがObjective-Cのコード例を以下に記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#import <Foundation/Foundation.h> //クラス宣言部 @interface TestClass : NSObject { NSString *myString; } - (void)setMyString :(NSString *)inputString; - (void)printString; @end //クラス実装部 @implementation TestClass : NSObject - (void)setMyString :(NSString *)inputString { myString = inputString; } - (void)printString { printf("myString is %s ", [myStringUTF8String]); } @end int main(int argc, constchar * argv[]) { @autoreleasepool { // insert code here... id testClassObj; testClassObj = [[TestClass alloc] init]; [testClassObj setMyString:@"ABCDEFG"]; [testClassObj printString]; } return 0; } |
●@の意味
Objective-Cでは@で始まる記述を用いることでコンパイラに対してObjective-C独自の処理方法を示します。コンパイラディレクティブと呼びます。
●クラスの記述方法
クラスは以下のようなルールで記述します。宣言部分と実装部分に分けて記述します。
1 2 3 4 5 6 7 8 9 10 11 |
//クラス宣言部 @interface クラス名 : NSObject { 〜メンバ変数〜この{}で囲まれた部分にメンバ変数を記述します } 〜メソッドの宣言〜ここにメソッドの宣言のみを記述します(メソッド名、戻り値、引数のみ) @end //クラス実装部 @implementation クラス名 〜メソッドの実装〜ここにメソッドの処理を記述します @end |
●id型
オブジェクト型の変数を宣言する場合、id型というデータ型を使う事ができます。どんなオブジェクトでも保存できるので便利です。クラス名を明示して「クラス名 *変数名」と記述してもOKです。
●メソッドの呼び出し方
クラスやインスタンスにあるメソッドを呼び出す場合は、[ ]を使って以下のような形で記述をします。
[インスタンス(or クラス) メソッド名]
[インスタンス(or クラス) メソッド名:値]
「呼び出す対象となるインスタンス」「呼び出すメソッドのキーワードや引数」といったものを順に[ ]内に記述します。
Objective-Cでは、「メッセージ式」と呼ばれる手法でメソッドの呼び出しを行っています。メッセージの送信先を「レシーバ」、そのレシーバに送るメッセージの内容を「セレクタ」といいます。
例えば、
1 |
[testClassObj setMyString:@"ABCDEFG"]; |
という文は、testClassObj というレシーバに対してsetMyString というセレクタに@”ABCDEFG”という値をつけてメッセージを送っている、ということになります。
1 |
[testClassObj printString]; |
の場合は、testClassObj レシーバに、printString というセレクタを呼び出すメッセージを送っています。
レシーバーに向けてメッセージが送られ、セレクタによってどのメソッドを呼び出すのかが識別され、見つかったメソッドが実行されることになります。
C++風に記述すれば、
1 |
testClassObj.setMyString("ABCDEFG"); |
と同じようなカンジになります。
Objective-Cのクラスは「メソッド定義の方法」と「メソッドの呼び出し方法」が少し特殊なカンジなのでここは慣れておきたいところです。
Objective-C 基礎 目次
以下の記事も参考にして頂ければと思います。
「Objective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成」
「Objective-C 基礎(2)- Objective-Cの概要とメソッドの呼び出し」
「Objective-C 基礎(3)- クラス定義の方法」
「Objective-C 基礎(4)- クラスの使い方」
「Objective-C 基礎(5)- クラスメソッドとインスタンスメソッド」
「Objective-C 基礎(6)- 変数のスコープとプロパティ」
「Objective-C 基礎(7)- 変数のデータ型」
「Objective-C 基礎(8)- 文字列とNSStringクラス」
「Objective-C 基礎(9)- 可変文字列とNSMutableStringクラス」
「Objective-C 基礎(10)- Objective-Cの配列」
「Objective-C 基礎(11)- Objective-Cの連想配列」
「Objective-C 基礎(12)- ループ処理」
「Objective-C 基礎(13)- プロトコル」