В моем сеттере есть входящая строка, которую я копирую, чтобы избежать каких-либо проблем в случае изменения оригинала.
- (void)setName:(NSString *)newName{
if(name != newName) {
[name release];
name = [newName copy];
}
}
Мой вопрос: когда я делаю копию, где я должен ее выпустить, или я просто делаю авто-релиз? т.е.
- (void)setName:(NSString *)newName{
if(name != newName) {
[name release];
name = [[newName copy] autorelease];
}
}
Как я сказал на ваш другой вопрос , autorelease
переводится как «отправить себя release
позже». Это означает, что он считается выпуском.
Итак, ваш второй пример высвобождает старое значение name
(хорошо), затем делает копию нового (хорошо), затем помещает новое в строку для выпуска (плохо), а затем помещает это сейчас обреченный объект в переменную экземпляра (очень плохо).
Первый пример верен, поскольку вы сохраняете сохранение объекта после помещения его в переменную экземпляра.
Как я уже сказал по вашему другому вопросу, я думаю, вам следует пересмотреть правила управления памятью .