автоматический выпуск предыдущего объекта по назначению - PullRequest
2 голосов
/ 29 июня 2010

Если у меня есть функция, подобная этой

void setSomeObject( SomeObjectClass obj /*, and some other params*/ )
{
  [_previous autorelease];
  _previous = obj;
}

Насколько я понял, сообщение об автозапуске отправляется самому объекту (не _previous), поэтому в какой-то момент, когда setSomeObject выходит из области действияисходный объект автоматически освобожден (если есть).Это правильно?Я не использую свойства, но полагаю, что с их использованием освобождение предыдущего объекта будет автоматическим, когда я self.previous = obj; ?

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Когда вы отправляете сообщение -autorelease объекту, оно добавляется к активному NSAutoreleasePool, которое очищается при запуске цикла выполнения. Если вы скажете [_previous autorelease], только этот объект будет автоматически освобожден, а если вы скажете _previous = obj, это только изменит ссылку на переменную. Старый объект все еще автоматически освобожден.

Если вы делаете это в методе установки, это, как правило, шаблон:

- (void)setSomeObject:(MyObjClass *obj) {
    if (obj != someObject) {
        [someObject release];
        someObject = [obj retain]; // or copy, depending on what you want
    }
}
0 голосов
/ 29 июня 2010

Нет, это неверно.

[_ предыдущее авто-релиз] отправляет сообщение авто-релиза _previous. В этом смысл этого синтаксиса.

...