Bre*_*don 4 macos null objective-c foundation ios
大家都知道,基金会收藏喜欢的NSArray,NSDictionary和NSSet不能存储nil的对象,而且你必须使用NSNull替代.我敢肯定,如果我挖掘开源Core Foundation源代码,我甚至可以找到强制执行的地方.
我不明白的是,为什么他们这样设计?它纯粹是因为nil在某些构造函数中被用作哨兵,还是有更深层次的原因导致这种行为?
我认为你不会得到满意的答案.这只是一个设计决定,就像其他一千个塑造了Cocoa的人一样.即使最初在当天作出决定的人要出现并解释,但解释总是必然归结为"这对我们来说似乎是最好的".也就是说,显然可以设计和实现可以容纳的集合类,nil并且任何不支持的理由都是可竞争的.有人会反驳说,理由对他们来说没有意义,而另一方面则是理由.那时它只是主观判断.
也就是说,这里有几个问题:
[dict objectForKey:@"myKey"]回归nil.这是因为nil
是@"myKey"为该键添加了值还是因为没有为该键添加值?NSArray像-containsObject:和的方法-indexOfObject:)用于-isEqual:测试对象相等性.但是,[nil isEqual:anything]总会返回false.因此,您永远无法nil在集合中找到.您可以通过额外的检查来克服这个问题nil,但是a)违反了-isEqual:用于确定相等性的设计合同,并且b)强加了实施成本.-lastObject,-firstObject和-anyObject返回nil时有集合中没有对象.你怎么区别于回归nil那个集合的成员?同样,为-[NSEnumerator nextObject].| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |