Ответ 1
Переменная string1
является NSString
строковым литералом. Компилятор выделяет для него пространство в исполняемом файле. Он загружается в память и инициализируется при запуске вашей программы. Он работает до тех пор, пока приложение работает. Вам не нужно retain
или release
его.
Продолжительность жизни переменной string2
до тех пор, пока вы укажете, до момента, когда вы release
указали ее последнюю ссылку. Вы выделяете для этого место, поэтому вы несете ответственность за очистку после него.
Продолжительность жизни переменной titleOfButton
- это срок службы метода -clicked:
. Это потому, что метод -titleForState:
возвращает autorelease
-d NSString
. Эта строка будет выпущена автоматически, как только вы покинете область действия метода.
Вам не нужно создавать newLabelText
. Этот шаг является излишним и беспорядочным. Просто установите для свойства labelsText.text
значение titleOfButton
:
labelsText.text = titleOfButton;
Зачем использовать свойства? Поскольку установка этого свойства retain
увеличит счетчик ссылок titleOfButton
на один (то почему он назвал свойство retain
), и поэтому строка, на которую указывает titleOfButton
, будет находиться в конце -clicked:
> .
Еще один способ подумать об использовании retain
в этом примере состоит в том, что labelsText.text
является "владельцем" строки, на которую указывает titleOfButton
. Эта строка будет продолжаться до тех пор, пока labelsText
живет (если какая-либо другая переменная также не принадлежит владельцу строки).