Это зависит от того, как вы определили свою собственность.
Если это copy
или retain
, то синтезированный установщик (setCharacter:
в вашем примере) получит право собственности на любые объекты, которые вы назначаете для свойства. В этой ситуации ваш первый пример верен. Второе приведет к утечке памяти, поскольку вы дважды заявили на право владения NSString
, и вы (вероятно) откажетесь от владения только один раз; таким образом, память никогда не может быть восстановлена.
Если это assign
, с другой стороны, сеттер не будет делать ничего особенного, и ваш второй пример будет верным. Первое приведет к ошибке EXC_BAD_ACCESS
, если вы попытаетесь что-либо сделать с NSString
. Должен отметить, что вы обычно используете assign
только для примитивных типов и делегатов.
Я предлагаю вам прочитать Руководство по программированию для управления памятью и Объявленные свойства в руководстве по языку программирования Objective-C.