Reference counting при использовании replaceObjectAtIndex NSMutableArray
NSString *str=@"string 1";
NSMutableString *str2=[NSMutableString stringWithString:str];
NSLog(@"%lx str2 retainCount after creating", (unsigned long)[str2 retainCount]);
NSMutableArray *arr=[NSMutableArray arrayWithObjects:str,str2,nil];
NSLog(@"%lx str2 retainCount after adding to array", (unsigned long)[str2 retainCount]);
[arr replaceObjectAtIndex:0 withObject:str];
NSLog(@"%lx str2 retainCount after replacing", (unsigned long)[str2 retainCount]);
После того, как я заменяю 0 элемент (arr) на str2, retainCount str2 не увеличивается почему-то. Если str2 до этого не было в arr, то retainCount увеличивается на 1. Вопрос: почему так? По идее, в первом элементы мы добавили еще одну ссылку на str2.
Вывод вышеописанного кода:
1 str2 retainCount after creating
2 str2 retainCount after adding to array
2 str2 retainCount after replacing
Источник: Stack Overflow на русском