Objective-C сохранить подсчет - PullRequest
1 голос
/ 21 мая 2010

Я вроде понимаю, на что рассчитывать удержание. Но не полностью. Я много смотрел в Google, чтобы попытаться понять, но все же не понимаю.

А теперь я в небольшом количестве кода (я занимаюсь разработкой для iPhone), который я думаю, что должен их использовать, но не знаю полностью, как.

Может ли кто-нибудь дать мне быстрый и хороший пример того, как и зачем их использовать?

Спасибо!

Ответы [ 2 ]

20 голосов
/ 21 мая 2010

Лучшее объяснение, которое я когда-либо слышал, было от Аарона Хиллегаса:

Думайте об объекте как о собаке. Тебе нужен поводок, чтобы собака не убегала и не исчезала, верно?

Теперь представьте себе retain как поводок. Каждый раз, когда вы звоните retain, вы добавляете поводок к ошейнику собаки. Вы говорите: «Я хочу, чтобы эта собака держалась». Ваше удержание на поводке гарантирует, что собака останется, пока вы не покончили с ней.

Думайте о release, как о снятии одного поводка с ошейника собаки. Когда все поводки убраны, собака может убежать. Нет никаких гарантий, что собака будет больше вокруг.

Теперь, скажем, вы звоните retain и привязываете собаку к поводку. Мне тоже нужна собака, поэтому я иду с вами и начинаю дрессировать его. Когда вы закончите с собакой, вы позвоните release и уберете поводок. Поводков больше нет, и собака убегает, хотя я все еще тренировал его!

Если вместо этого я позвоню собаке retain до того, как начну ее дрессировать, у меня будет второй поводок на ошейнике. Когда вы звоните release и убираете поводок, у меня все еще есть один, и собака пока не может уйти.

Различные объекты могут «владеть» собакой, позвонив по номеру retain и надев на поводок еще одну привязь Каждый объект следит за тем, чтобы собака не уходила, пока с ней не покончено. Собака не может уйти, пока не будут удалены все поводки.

Пулы с автоматическим выпуском усложняются, но проще говоря, вы можете назвать autorelease передачей вашего поводка тренеру. Вам больше не нужна собака, но вы не сразу сняли поводок. Тренер снимет поводок позже; до сих пор нет гарантии, что собака будет рядом, когда она вам понадобится.

5 голосов
/ 21 мая 2010

Если вы еще этого не сделали, я настоятельно рекомендую вам ознакомиться с Руководством по программированию управления памятью от Apple

В этом разделе вы найдете раздел, посвященный сохранить количество

...