Посмотрите, что бериллий указанные выше;) Никогда не используйте -retainCount
Тем не менее, есть две проблемы:
Первый не в autorelease бассейне, но в вашем 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 (что означает, что они не могут быть dealloc'd).
Я только что запустил ваш оригинальный пример, и он выглядит как NSString, инициализированный с помощью -initWithString:
, возвращает исходную строку. В этом случае это постоянная строка, поэтому она возвращает NSIntegerMax.
Не используйте saveCount. См. [Когда использовать -retainCount?] (Http://stackoverflow.com/questions/4636146/when-to-use-retaincount) – beryllium
Возможный дубликат [NSString keep Count] (http://stackoverflow.com/questions/1390334/nsstring-keep-count) –