1

我不明白为什么我不能将许多 [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"

那么,如果它是一个集合,为什么它不起作用?

非常感谢

4

3 回答 3

2

[NSNull null]总是返回相同的对象( 的单例实例NSNull)。

NSObject *a = [NSNull null];
NSObject *b = [NSNull null];
// a == b

NSMutableSet并且NSMutableOrderedSet不同对象的集合,因此它们最多可以包含这个“空对象”的一个实例。

于 2012-11-20T20:33:02.400 回答
1

NSOrderedSet并且其子类NSMutableOrderedSet不能包含同一对象的多个副本。NSNull是一个单例,因此将其多次添加到集合中只会添加一个副本。

如果您希望能够将多个副本添加到集合中,请NSCountedSet改用:

NSCountedSet set = [NSCountedSet set];
for(int i = 0; i < 10; i++)
{
    [set addObject: [NSNull null]];
}
NSLog(@"%ud", [set countForObject:[NSNull null]]);
于 2012-11-20T20:35:33.237 回答
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.

于 2012-11-20T20:35:41.210 回答