Rumah > Soal Jawab > teks badan
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出来分别是几?为什么?
黄舟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.