我不明白为什么我不能在NSMutableOrderedSet中添加很多NSNull null:
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"那么,如果它是一个集合,为什么它不工作呢?
非常感谢
发布于 2012-11-21 04:33:02
[NSNull null]总是返回相同的对象(NSNull的单一实例)。
NSObject *a = [NSNull null];
NSObject *b = [NSNull null];
// a == bNSMutableSet和NSMutableOrderedSet是不同对象的集合,因此它们最多只能包含这个“空对象”的一个实例。
发布于 2012-11-21 04:35:33
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-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中。
https://stackoverflow.com/questions/13481497
复制相似问题