Исходя из этой ссылки здесь , возможно, что происходит некоторая оптимизация под прикрытием для общих номеров NSN (что может случиться не во всех реализациях, поэтому возможная причина, почему @ dizy's retainCount равна 1). 1003 *
По сути, поскольку номера NSN не являются изменяемыми, базовый код может предоставить вам вторую копию того же номера, которая объяснит, почему счетчик сохранения равен двум.
Какой адрес у n и n1? Я подозреваю, что они одинаковы.
NSNumber* n = [[NSNumber alloc] initWithInt:100];
NSLog(@"Count of n : %i",[n retainCount]);
NSNumber* n1 = n;
NSLog(@"Count of n : %i",[n retainCount]);
NSLog(@"Count of n1: %i",[n1 retainCount]);
NSLog(@"Address of n : %p", n);
NSLog(@"Address of n1: %p", n1);
Судя по вашему обновлению, ссылка, которую я вам дал, почти наверняка является проблемой. Кто-то выполнил тест и обнаружил, что номера NSN от 0 до 12 дадут вам дубликаты уже созданных (на самом деле они могут быть созданы платформой даже до того, как пользователь их запросит). Другие выше 12, кажется, дали счет сохранения 1. Цитата:
Из небольшой проверки, которую я смог сделать, похоже, что вы получите «общие» версии целочисленных NSNumbers для значений в диапазоне [0-12]. Все, что больше 12, дает вам уникальный экземпляр, даже если значения равны. Почему двенадцать? Понятия не имею. Я даже не знаю, является ли это жестким числом или косвенным.
Попробуйте это с 11, 12 и 13 - я думаю, вы обнаружите, что 13 является первым, кто даст вам не-общий NSNumber.