首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableOrderedSet和NSNull行为?

NSMutableOrderedSet和NSNull行为?
EN

Stack Overflow用户
提问于 2012-11-21 04:24:54
回答 3查看 349关注 0票数 1

我不明白为什么我不能在NSMutableOrderedSet中添加很多NSNull null:

代码语言:javascript
复制
NSMutableOrderedSet *set = [[NSMutableOrderedSet alloc]init];
for(int i = 0; i < 10; i++)
    {
        [set addObject: [NSNull null]];
    }

NSLog("SET COUNT : %d", set.count);

此输出:

代码语言:javascript
复制
SET COUNT : 1

如果我用NSMutableArray试一下,它工作得很好,我读过NSNull文档(它非常简短,但没有帮助),但它说:

代码语言:javascript
复制
"The NSNull class defines a singleton object used to represent null values in collection objects"

和NSMutableOrderedSet文档,它说它是一个

代码语言:javascript
复制
"[...] ordered collection of distinct objects"

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

非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-21 04:33:02

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

代码语言:javascript
复制
NSObject *a = [NSNull null];
NSObject *b = [NSNull null];
// a == b

NSMutableSetNSMutableOrderedSet是不同对象的集合,因此它们最多只能包含这个“空对象”的一个实例。

票数 2
EN

Stack Overflow用户

发布于 2012-11-21 04:35:33

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

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

代码语言:javascript
复制
NSCountedSet set = [NSCountedSet set];
for(int i = 0; i < 10; i++)
{
    [set addObject: [NSNull null]];
}
NSLog(@"%ud", [set countForObject:[NSNull null]]);
票数 1
EN

Stack Overflow用户

发布于 2012-11-21 04:35:41

你的问题本身就有答案。上面写着"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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13481497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档