Objective-C 処理の呼び出し 【初級編 第3回】
前回はクラスの定義と実装部分について説明させてもらいましたが、今回は処理の呼び出しについてです。
メッセージ
Objective-Cでは(というよりオブジェクト指向ではかな)、あるオブジェクトに対して処理を依頼し、
処理を行ってもらうことをメッセージを送信するといいます。
メッセージを送信する側をセンダー、受け取る側をレシーバーといい、オブジェクト間の情報交換は
このメッセージの送受信により成り立ちます。
メッセージの送信はメッセージ式で行います。このメッセージ式というのはSmalltalkの概念で、Objective-CはSmalltalkを
意識して作られているので同じ用語などが多いようです。
構文は以下のようになります。
[レシーバ メッセージ];
レシーバは上で記述したようにメッセージを受け取るオブジェクトを指定します。メッセージはセレクタと呼ばれるものと
引数から構成されます。セレクタとはまあメソッド名のようなものです。引数は「:」付けて指定をします。
たとえば「Obj」というオブジェクトにcalsというメソッドが用意してあり、そのメソッドに数値の10を引数としてメッセージを送信する場合は、以下のようにします。レシーバが「Obj」でメッセージが「calc:10」、セレクタが「calc:」となります。
[Obj calc:10];
これを踏まえて今回のコードでメソッドの呼び出しを行っている部分を見てみると以下のところです。
id myobj = [TestClass alloc];
[myobj testMethod];
[myobj free];
今回は引数がないですね。そして「@implementation」で定義していないメソッドが呼ばれています。
「alloc」と[free」のことです。この二つはimportしている「Object.h」で定義されています。
「Object」クラスを継承しているので使用できるわけです。継承についてはまたのちほど。
一応「Object.h」をのぞいてみると以下のようになっていました。
@interface Object { Class isa; /* A pointer to the instance's class structure */ } /* Initializing classes and instances */ + initialize; - init; /* Creating, freeing, and copying instances */ + new; + alloc; //ここの2行でで定義されているものを呼び出しています - free; // - copy; - shallowCopy; - deepen; - deepCopy;
「+」が頭についているものはクラスメソッドとなります。インスタンス化せずに使用することのできるメソッドです。
「-」が頭についているものはインスタンスメソッドとなります。インスタンス化しなければしようできません。
※この辺りはまたいずれ出てきます。
ではそれぞれのメッセージ式で行っていることを見てみましょう。
「TestClass alloc」はクラスをインスタンス化しています。クラスメソッドであるため、クラスがレシーバとなります。
このメソッドによりメモリ上に必要な領域が確保され、インスタンス化したものはアクセスするために
どんなクラスでも表せるid型の変数に格納しています。
「myobj free」は上記メソッドで確保したメモリを開放しています。インスタンス型メソッドなので作成したものが
格納されている「myobj」がレシーバとなります。
「myobj testMethod」はTestClass内で定義したメソッドで「Hello World!!」と表示するだけのものです。
このメソッドもインスタンス型なので「myobj」がレシーバとなります。
行っていることはクラスのインスタンス化–>文字の表示–>インスタンスの解放とごく簡単なものとなってます。
今回のまとめとしては
- 何か処理を行いたいときはメッセージ式を使用して対象オブジェクトにメッセージを送信する
- メッセージ式はレシーバとメッセージから構成され[]で囲むようにする
- メッセージには引数を指定できる
といったとことでしょうか。
TechProjin 開発系基礎講座 連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
AIなどで注目急上昇!これから学ぶならPython!!
独学で学ぶ-pythonプログラミング 連載
汎用性◎ 定番プログラミング言語JAVA
Java基礎講座 連載