Если добавить следующую строку
NSLog(@"%p %p %p", [NSArray new], [NSArray new], [NSArray new]);
тогда вы заметите, что все значения указателей одинаковы (а также что начальное значение dic1 увеличилось на три и теперь начинается с 5). Это означает, что [[NSArray alloc] init]
на самом деле ничего не выделяет, а просто сохраняет некоторый всегда живой синглтон и возвращает его.
Никогда полагается на значение retainCount
, поскольку объект может быть внутренне сохранен средой выполнения и средами. Некоторые объекты могут даже не иметь счетчика сохранения. Это также подразумевает, что вы не должны ожидать, что release
будет предсказуемо вызывать освобождение.