多分殆ど役に立たないけれど、ごく希に有効なケースと、挙動の把握に必要かも知れない不思議なコード。
知っている人には当たり前のことかも知れないけれど、
sample.m
id nullObject = [[nil alloc] init];
NSLog(@"%@", nullObject);
なんてことをやると、
result
DocTest[31390:303] (null)
が帰ってくる。
どう使うか?
当然、これは単体では役に立たない。
しかし、ちょっと考えると、
sample2.m
Class klass = nil;
switch (condition) {
case a:
klass = [MyClass1 class];
break;
case b:
klass = [MyClass2 class];
break;
default:
klass = nil; // なくても良い
break;
}// end case by condition
id instance = [[klass alloc] init];
// 以下適切な処理を
などしてやると、nilに対するメッセージは何も起きないので、例外はノーアクションで良いコーディングの時には使えるかも知れない。
しかしやっぱり
元々気持ち悪い言語だけど、ここまで奇抜なことが出来るとは思わなかった。