Programming in Objective-C (7)
前々回の続きで、第7章「More on Classes(より詳しいクラスの説明)」。 内容はファイルの分割、複数の引数を持つメソッド、ローカル変数、static、self、メモリリーク(メモリの解放忘れ)に関して。
まず、ファイル分割。 @interface部はクラスが外部からどう見えるかを記述したもので、これは従来のCのヘッダーファイルに相当し、「クラス名.h」というファイルに入れる。 それで、そのクラスを利用するファイルで#import "クラス名.h"としてインポートする。 次に@implementation部は「クラス名.m」などというファイルに分割してやる。 コンパイルするとき、一つのファイルしかなかった場合と違うのは、「.m」ファイルを複数並べて指定すること。
次に、複数の引数を持ったメソッドは「メソッド名:引数2を表すキーワード:引数3を表すキーワード:...」と表される。 宣言は以下のようになる。
メソッドの種類 (返り値の型) メソッド名: (型)仮引数1 引数2を表すキーワード: (型)仮引数2 引数3を表すキーワード: (型)仮引数3...;
実は、この引数を表すキーワードはなくてもいいのだが、あった方がわかりやすい。
それから、メソッドの中で、処理を行なうために、変数を宣言して使うことがある。 この変数は、普通に宣言すると、ローカル変数となり、これはそのメソッドの中で使うことができ、メソッドが呼ばれる度にメモリ上に確保され、メソッドが値を返すと消えてしまう。 メソッドの引数もローカル変数で、引数の元の値が、仮引数にコピーされて使われているので、メソッドの中でいくら値を書き換えても、メソッドを呼び出した側には何も影響しない。 ただし、変数が参照型だったりして、それを使って参照先を直接いじるようにプログラムを書くと、メソッドの外にも影響を及ぼす。 まあ、これはCのポインタの場合と一緒。 また、メソッドの中で変数を宣言するときにstaticを付けてやると、この値は静的にメモリ上に確保され、メソッドが値を返しても消えない。 なお、staticを付けても、この変数の値は、変数が宣言されているメソッドの中でしか使えないことには注意する必要がある。
それから、メソッドの中で、(他の)オブジェクトのメソッドを呼ぶことができる。 自分自身のオブジェクトのメソッドを呼ぶには、オブジェクトにはselfを指定してやればよい。
最後にメモリリーク(メモリの解放忘れ)について。 Cでは、メモリ管理は自分で自覚的に行なう必要がある。 それで注意しなければならないが、オブジェクトにfreeをし損ねることだ。 また、メソッドの中でオブジェクトを作って処理をすることがあるが、そのメソッドが再帰呼び出しされていたりすると、次々とオブジェクトが作られ、どんどんメモリを消費してしまう。 これを解決する万能薬はなさそうで、注意してプログラムを書く必要があるということで。
| 固定リンク
この記事へのコメントは終了しました。
コメント