私の理解によれば、 inやcollectionなど、オブジェクトが明示的に必要な状況でNSNullの代替として存在します。nilNSArrayNSDictionary
の動作の良い点の 1 つはnil、多くの詳細なnullチェックをスキップできることです。同じ動作を で実装すると便利NSNullです。次の例を検討してください。
NSDictionary * json = // deserialized JSON from a REST service
NSString * name = json[@"first_name"];
if (name != nil && ![name isEqual:[NSNull null]] && [name isEqualToString:@"Gabriele"]) { ... }
チェックは現在、次のように簡略化できます
if (![name isEqual:[NSNull null]] && [name isEqualToString:@"Gabriele"]) { ... }
[NSNull null] が の動作を模倣している場合はnil、さらに単純化できます。
if ([name isEqualToString:@"Gabriele"]) { ... }
だから私の質問は、認識されていないセレクターの動作を模倣する-forwardInvocation:方法をApple がオーバーライドしなかったのはなぜですか?NSObjectnil
その背後にある哲学を理解し、考えられない欠点や壊れた慣習があるかどうかを理解したいと思います。