Посмотрите, что бериллий сказал выше;) Никогда не используйте -retainCount
Тем не менее, здесь есть две проблемы:
Первая не в пуле автоматического выпуска, но в вашем NSLog.
-[NSObject retainCount]
возвращает NSUInteger, который имеет ширину 32 или 64 бита, в зависимости от архитектуры системы.Рекомендуется всегда приводить значения NSInteger к (long) и значения NSUInteger к (unsigned long), когда функция принимает переменное число аргументов.Следовательно:
NSLog(@"%l", (long)[str integerValue]
или
NSLog(@"%lu", (unsigned long)[str retainCount])
Вторая - это оптимизация: @ «Это строковый объект» на самом деле является строкой NSString, но специальной NSString, называемой NSCFConstantString, котораяимеет счет сохранения NSIntegerMax (что означает, что они не могут быть освобождены).
Я только что запустил ваш оригинальный пример, и похоже, что строка NSString, инициализированная с помощью -initWithString:
, возвращает исходную строку.В данном случае это постоянная строка, поэтому она возвращает NSIntegerMax.