Правильный спецификатор типа - %lu
, а не %d
.Метод retainCount
возвращает NSUInteger
, который без знака и по размеру равен long
, поэтому практически эквивалентен unsigned long
, для которого вы используете %lu
.%d
равно int
, что подписано и (на некоторых архитектурах) короче.Использование неправильных спецификаторов типов - хороший способ получить неправильный вывод.Итак, посмотрите, исправляет ли исправление ваш вывод.
Если это не так, то это, безусловно, загадка.