Как всем известно, setTitle автоматически сохраняет строку, переданную в качестве параметра.
В самом деле? Я не знаю это На самом деле, я поставлю пинту пива, что она не сохраняет строку, а копирует ее.
Конечно, для NSString -copy, вероятно, реализован как выполняющий сохранение и возврат себя, но если вы передадите ему NSMutableString, произойдет подлинная копия.
Я думаю, что необходимо освободить текущую (старую) строку перед установкой новой.
Снова угадай, присоска!
Или менее явно: любой объект отвечает за управление правами собственности на другие объекты, которые он хочет сохранить. После того, как вы передали заголовок в setTitle: вам не нужно беспокоиться о том, как объект избавится от него, как только он получит новый.
Рассмотрим код:
[currentCardButton titleForState:UIControlStateNormal]
и применить правила управления памятью к возвращаемому результату.
Вы получили его с помощью alloc, new или copy? Вы сохранили это? Нет (помните, мы говорим об объекте, переданном обратно методом, , а не объект, который вы ему изначально дали). Следовательно, вы не должны выпускать его.