1

NSMutableOrderedSetに多くの[NSNullnull]を追加できない理由がわかりません。

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個別のオブジェクトのコレクションであるため、この「nullオブジェクト」のインスタンスを最大で1つ含めることができます。

于 2012-11-20T20:33:02.400 に答える
1

NSOrderedSetまた、そのサブクラスNSMutableOrderedSetに同じオブジェクトの複数のコピーを含めることはできません。NSNullシングルトンであるため、セットに複数回追加すると、1つのコピーのみが追加されます。

セットに複数のコピーを追加できるようにする場合は、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"。 は個別のオブジェクトではなく、インスタンスが1つしかないため、カウントは1になります。このような[NSNull null]複数のオブジェクトをに追加することはできません。"null"NSMutableOrderedSet

于 2012-11-20T20:35:41.210 に答える