/ / NSMutableOrderedSetとNSNullの動作? - iphone、objective-c、ios、ココアタッチ、シンタックス

NSMutableOrderedSetとNSNullの動作ですか? - iphone、objective-c、ios、ココアタッチ、シンタックス

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"

だからコレクションであれば、それはなぜ機能していませんか?

どうもありがとうございました

回答:

回答№1は2

[NSNull null] 常に返す 同じオブジェクト (のシングルトンインスタンス NSNull)。

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

NSMutableSet そして NSMutableOrderedSet コレクション 異なるオブジェクトしたがって、この「nullオブジェクト」のインスタンスを最大で1つまで含めることができます。


回答№2の場合は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]]);

回答№3の場合は1

あなたの質問には答えがあります。それは言う "ordered collection of distinct objects" そして "The NSNull class defines a singleton object used to represent null values in collection objects". [NSNull null] はっきりとしたオブジェクトではなく、インスタンスが1つしかないため、カウントに1が表示されます。複数 "null" このようなオブジェクトを NSMutableOrderedSet.