NSDictionary *dictA =[[NSDictionary alloc] initWithObjectsAndKeys:@"1",@"two", nil]; NSLog(@"dictA retain count is %d",[dictA retainCount]); NSDictionary *dictB =[[NSDictionary alloc] init]; NSLog(@"dictB retain count is %d",[dictB retainCount]);
问:NSLog出来分别是几?为什么?
まず、2 つの出力。最初の出力は 1、2 番目の出力は である必要があります。 。 。いいえ、とにかく通常は 1 より大きくなります。
。 リーリーその理由は次のとおりです:
NSDictionary インスタンスを初期化すると、インスタンスは不変になります。つまり、インスタンスが生成されると、メモリ内の情報は固定されます。メモリを節約するために、Objective-C は同じインスタンスの不変ポインタをすべて同じメモリを指すようにします。したがって、dictB が空の NSDictionary を初期化すると、実際には新しいインスタンスは作成されませんが、履歴内の既存のインスタンスを指し、このインスタンスの RC は 1 増加します。
dictAで最初に作成したオブジェクトは重複オブジェクトが存在しないようなので、こうすると新規インスタンスになります
そして、これは印刷時には 2 になるはずで、これは dictA の RC + 1 です。
同様に、Mutable インスタンスでは、ライフサイクル中いつでも変更できるため、作成されるたびにこの状況が発生することはありません。