Будучи новичком в Cocoa/Obj-C, я просматриваю книгу Аарона Хиллегасса «Программирование какао для Mac OS X» и, оставляя в стороне тот факт, что теперь у нас также есть возможность использовать GC, чтобы избежать всех этих рассуждений, я не уверен, что я понимаю причину для некоторых из тех сохраняет.
В частности, в одном из примеров, которые Аарон приводит в качестве хорошей практики программирования:
- (void) setFoo:(NSCalendarDate *)x
{
[x retain];
[foo release];
foo = x;
}
Я не понимаю причину сохранения экземпляра x в первой строке метода:
[x retain];
Область действия этого экземпляра — это просто метод set, верно? При выходе из области действия метода экземпляр x все равно должен быть освобожден, нет? Кроме того, при назначении x для foo с помощью:
foo = x;
foo в любом случае будет указывать на x ячеек памяти и, следовательно, будет увеличивать счетчик сохранения указанного объекта, нет? Это должно гарантировать, что память не будет освобождена.
Итак, в чем смысл? Я уверен, что я что-то упускаю, конечно, но не знаю, что именно.
Спасибо, Фабрицио.