Релиз
из-за автоматического выпуска не вызывается до конца текущего цикла выполнения, поэтому foo_ wont dealloc, потому что сначала вызывается retain, а затем выпуск в конце текущего цикла выполнения. Однако, это не то, как работает код, сгенерированный в @synthesize. Это работает больше как
- (void)setFoo:(GMFoo *)aFoo {
if (aFoo != foo_) {
[aFoo retain];
[foo_ release];
foo_ = aFoo;
}
}
Этот метод сохраняет циклы процессора, когда не требуется никаких изменений, и устраняет небольшие накладные расходы при использовании пула автоматического выпуска.