Должен ли я выпустить NSString, прежде чем присваивать ему новое значение? - PullRequest
2 голосов
/ 06 июня 2010

Пожалуйста, дайте мне несколько советов о том, как изменить переменную NSString.

В моем классе я установил член var:

NSString *m_movieName;
...
@property(nonatomic, retain) NSString *m_movieName;

В методе viewDidLoad я назначаю имя по умолчанию для этой переменной:

-(void)viewDidLoad{
NSString *s1 = [[NSString alloc] initWithFormat:@"Forrest Gump"];
self.m_movieName = s1;
...
[s1 release];
[super viewDidLoad]
}

В какой-то функции я хочу дать новое имя этой переменной, поэтому я сделал следующее:

-(void)SomeFunc{
NSString *s2 = [[NSString alloc] initWithFormat:@"Brave Heart"];
//[self.movieName release]; // ??????? Should perform here?
self.m_moiveName = s2;
[s2 release];
}

Я знаю, NSString * var - это просто указатель на выделенный блок памяти, и операция 'assign' будет увеличивать счетчик использования этого блока памяти. Для моей ситуации, я должен выпустить m_movieName перед присвоением ему значения? Если я не отпущу его (через [self.movieName release]), когда и где будет выпущен предыдущий блок? Большое спасибо за вашу помощь!

Ответы [ 2 ]

7 голосов
/ 06 июня 2010

Нет, вы объявили свою собственность как retain, что означает, что ваш объект сохранит значение свойств. Синтезированный (= созданный компилятором) установщик позаботится об освобождении старой строки NSSt перед присвоением нового значения, поэтому вам не придется управлять этим самостоятельно.

Будьте осторожны, когда обращаетесь к бэк-хранилищу напрямую к свойству (m_movieName в вашем случае), поскольку обход установщика не выдаст текущее значение автоматически.

3 голосов
/ 06 июня 2010

Прежде всего, мой совет: если вы используете свойство NSString, используйте copy вместо retain . Проверьте этот ТАК вопрос для деталей.

@property(nonatomic, copy) NSString *m_movieName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...