objective-c - [[NSDictionary alloc] init]后引用计数是几
黄舟
黄舟 2017-04-21 10:57:37
0
1
454
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出来分别是几?为什么?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(1)
黄舟

まず、2 つの出力。最初の出力は 1、2 番目の出力は である必要があります。 。 。いいえ、とにかく通常は 1 より大きくなります。
その理由は次のとおりです:
NSDictionary インスタンスを初期化すると、インスタンスは不変になります。つまり、インスタンスが生成されると、メモリ内の情報は固定されます。メモリを節約するために、Objective-C は同じインスタンスの不変ポインタをすべて同じメモリを指すようにします。したがって、dictB が空の NSDictionary を初期化すると、実際には新しいインスタンスは作成されませんが、履歴内の既存のインスタンスを指し、このインスタンスの RC は 1 増加します。
dictAで最初に作成したオブジェクトは重複オブジェクトが存在しないようなので、こうすると新規インスタンスになります

。 リーリー

そして、これは印刷時には 2 になるはずで、これは dictA の RC + 1 です。

同様に、Mutable インスタンスでは、ライフサイクル中いつでも変更できるため、作成されるたびにこの状況が発生することはありません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート