我不明白为什么我不能将许多[NSNull null]添加到NSMutableOrderedSet:
NSMutableOrderedSet *set = [[NSMutableOrderedSet alloc]init];
for(int i = 0; i < 10; i++)
{
[set addObject: [NSNull null]];
}
NSLog("SET COUNT : %d", set.count);
此输出:
SET COUNT : 1
如果我尝试使用NSMutableArray它可以正常工作,我已经阅读了NSNull文档(这很短但没有帮助)但是它说:
"The NSNull class defines a singleton object used to represent null values in collection objects"
和NSMutableOrderedSet文档,它说它是
"[...] ordered collection of distinct objects"
所以,如果它是一个集合,为什么它不起作用?
非常感谢
答案 0 :(得分:2)
[NSNull null]
始终返回相同的对象(NSNull
的单例实例)。
NSObject *a = [NSNull null];
NSObject *b = [NSNull null];
// a == b
NSMutableSet
和NSMutableOrderedSet
是不同对象的集合,因此它们最多只能包含此“空对象”的一个实例。
答案 1 :(得分:1)
NSOrderedSet
及其子类NSMutableOrderedSet
不能包含同一对象的多个副本。 NSNull
是 singleton ,因此多次将其添加到集合中会导致只添加一个副本。
如果您希望能够将多个副本添加到一个集合中,请改为使用NSCountedSet
:
NSCountedSet set = [NSCountedSet set];
for(int i = 0; i < 10; i++)
{
[set addObject: [NSNull null]];
}
NSLog(@"%ud", [set countForObject:[NSNull null]]);
答案 2 :(得分:1)
你的问题本身有答案。它说"ordered collection of distinct objects"
和"The NSNull class defines a singleton object used to represent null values in collection objects"
。 [NSNull null]
不是一个独特的对象,它只有一个实例,因此计数表示1.您不能将"null"
这样的多个NSMutableOrderedSet
对象添加到{{1}}。