根据我的理解,在明确需要对象的情况下(例如在和集合中)NSNull
存在替代。nil
NSArray
NSDictionary
的行为的优点之一是可以跳过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"]) { ... }
所以我的问题是,为什么 Apple 不覆盖模仿无法识别的选择器行为的-forwardInvocation:
方法?NSObject
nil
我想了解它背后的哲学,并了解是否存在一些我无法想到的缺点或一些违反惯例。