Простой ответ заключается в том, что, поскольку @"Hi
"является строковым литералом, он всегда будет сидеть в двоичном исполняемом образе и никогда не" уйдет ", поэтому сохранение / освобождение не окажет никакого эффекта, и вы видя UINT_MAX
(который выглядит как -1 при распечатке со знаком, например, с% d). (См. ответ Пита Киркхэма о объектах NSO, имеющих эту семантику).
Помимо этого, полезно знать, что хотя @ "Hi" ведет себя как NSString*
, на самом деле это экземпляр класса CFConstantString
, созданный компилятором (или, возможно, NSConstantString, мой отладчик не согласен с некоторой документацией ), который оборачивает литеральные строковые данные и предоставляет вам интерфейс NSString *. Но компилятор знает, что эти строки особенные и не могут быть очищены, поэтому у них всегда будет retainCount UINT_MAX (-1)