cari

Rumah  >  Soal Jawab  >  teks badan

objective-c - [[NSDictionary alloc] init]后引用计数是几

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出来分别是几?为什么?

黄舟黄舟2769 hari yang lalu450

membalas semua(1)saya akan balas

  • 黄舟

    黄舟2017-04-21 10:59:37

    Pertama, dua keluaran, yang pertama hendaklah 1 dan yang kedua hendaklah . . . Tidak, ia selalunya lebih besar daripada 1.
    Sebabnya ialah:
    Selepas anda memulakan tika NSDictionary, tika itu tidak boleh diubah, yang bermaksud bahawa sebaik sahaja ia dijana, maklumat dalam memori ditetapkan. Untuk menjimatkan ingatan, Objektif-C akan menghalakan semua penunjuk tidak berubah bagi contoh yang sama ke memori yang sama. Oleh itu, apabila anda dictB memulakan NSDictionary kosong, ia sebenarnya tidak mencipta tika baharu, tetapi menunjuk kepada tika sedia ada dalam sejarah, dan RC tika ini dinaikkan sebanyak 1.
    Objek yang anda buat dengan dictA buat kali pertama nampaknya tidak mempunyai objek pendua, jadi ia adalah contoh baharu jika anda melakukan ini

    NSDictionary *dictC =[[NSDictionary alloc] initWithObjectsAndKeys:@"1",@"two", nil];
    NSLog(@"dictC retain count is %d",[dictC retainCount]);

    Maka ini sepatutnya 2 apabila dicetak, iaitu RC + 1 dictA.

    Sejajar dengan itu, Instance boleh ubah tidak akan mempunyai situasi ini Setiap kali ia dicipta, ia adalah kejadian baharu, kerana ia boleh berubah pada bila-bila masa semasa kitaran hayat.

    balas
    0
  • Batalbalas