私の理解によれば、 inやcollectionなど、オブジェクトが明示的に必要な状況でNSNull
の代替として存在します。nil
NSArray
NSDictionary
の動作の良い点の 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 がオーバーライドしなかったのはなぜですか?NSObject
nil
その背後にある哲学を理解し、考えられない欠点や壊れた慣習があるかどうかを理解したいと思います。