Когда вы устанавливаете свойство playerName
, оно автоматически сохраняет NSString
(даже если его конструктор автоматически высвобождает его). Поэтому вам придется выпустить его снова в какой-то момент (предпочтительно в методе dealloc
).
Когда вы присваиваете значение свойству, объявленному с флагом сохранения, как в @property(retain)
, тогда, когда вы присваиваете значение этому свойству, оно выполняет три действия: освобождает старое значение, присваивает переменную новому значению, и сохраняет новое значение. Таким образом, строка, которую вы создаете с помощью stringWithUtf8String:
, имеет счет сохранения 1 после выполнения этой строки.
В какой-то момент вам придется выпустить эту строку, иначе вы получите утечку. Однако, поскольку это свойство, оно не должно освобождаться до того, как объект, который его содержит, поэтому вы должны поместить это выражение в ваш метод dealloc
.
Если ничего из этого не имеет смысла, взгляните на руководство по управлению памятью, с которым связана Алекс.