Это потому, что вы используете removeObject
, который удаляет все объекты, "равные" тому, который вы передаете. Согласно этой документации Apple :
Этот метод использует indexOfObject: для поиска совпадений, а затем удаляет
их с помощью removeObjectAtIndex :. Таким образом, совпадения определяются на
основа ответа объекта на сообщение isEqual :. Если
массив не содержит anObject, метод не имеет никакого эффекта (хотя
требует затрат на поиск содержимого).
Вы видите эффекты буквальных строк здесь, где каждый из этих @"hi"
объектов окажется одним и тем же объектом, только что добавленным много раз.
Что вы действительно хотите сделать, это:
NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"hello",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",nil];
[arr removeObjectAtIndex:2];
NSLog(@"%@",arr);
Тогда вы специально удаляете объект с индексом 2.