Лучшее объяснение, которое я когда-либо слышал, было от Аарона Хиллегаса:
Думайте об объекте как о собаке. Тебе нужен поводок, чтобы собака не убегала и не исчезала, верно?
Теперь представьте себе retain
как поводок. Каждый раз, когда вы звоните retain
, вы добавляете поводок к ошейнику собаки. Вы говорите: «Я хочу, чтобы эта собака держалась». Ваше удержание на поводке гарантирует, что собака останется, пока вы не покончили с ней.
Думайте о release
, как о снятии одного поводка с ошейника собаки. Когда все поводки убраны, собака может убежать. Нет никаких гарантий, что собака будет больше вокруг.
Теперь, скажем, вы звоните retain
и привязываете собаку к поводку. Мне тоже нужна собака, поэтому я иду с вами и начинаю дрессировать его. Когда вы закончите с собакой, вы позвоните release
и уберете поводок. Поводков больше нет, и собака убегает, хотя я все еще тренировал его!
Если вместо этого я позвоню собаке retain
до того, как начну ее дрессировать, у меня будет второй поводок на ошейнике. Когда вы звоните release
и убираете поводок, у меня все еще есть один, и собака пока не может уйти.
Различные объекты могут «владеть» собакой, позвонив по номеру retain
и надев на поводок еще одну привязь Каждый объект следит за тем, чтобы собака не уходила, пока с ней не покончено. Собака не может уйти, пока не будут удалены все поводки.
Пулы с автоматическим выпуском усложняются, но проще говоря, вы можете назвать autorelease
передачей вашего поводка тренеру. Вам больше не нужна собака, но вы не сразу сняли поводок. Тренер снимет поводок позже; до сих пор нет гарантии, что собака будет рядом, когда она вам понадобится.