nil オブジェクトへのメッセージ送信について : Objective-C プログラミング

PROGRAM


nil オブジェクトへのメッセージ送信について

Objective-C では、変数に nil オブジェクトが格納されている場合には、そのオブジェクトに対してどんなメソッドやプロパティの呼び出しを行っても、何もしないようになっています。

これを利用する事で、次のように、変数に nil が格納されているかインスタンスが格納されているかを調べることなく、メソッドを実行することができます。

// たとえば、id 型の "aObject" 変数に格納されているのが nil でない場合でも、nil かどうかの判定をせずに "toString" メソッドを呼び出して支障ありません。

[aObject toString];

これで、変数にインスタンスが格納されていれば、そのインスタンスに対してメソッドの実行を行わせることができ、逆に nil が格納されていれば何もしない、というプログラムを記載することができました。

このとき、そのメソッドやプロパティの戻り値が、オブジェクト型であれば nil を、数値型であれば 0 を、論理型であれば NO をといった形で、エラーになることなく実行を完了します。

 

注意点としては、これはあくまでも nil かどうかといった気遣いを省略することができるということで、既に dealloc が呼ばれた解放済みのインスタンスが変数に格納されている場合には例外エラーとなるので、格納されているインスタンスが無効になった後に、その変数に nil を格納しておくといった制御は必要に応じて行っておくようにします。

[ もどる ]