Могу ли я досрочно освободить объект автоматического выпуска? - PullRequest
5 голосов
/ 05 мая 2010

т.е. приведет к немедленному освобождению объекта и не будет освобождаться пулом, если я это сделаю?

[[NSArray arrayWithCapacity:100] release];

Не могу найти четкого объяснения в документации по этому поводу.

Ответы [ 3 ]

7 голосов
/ 05 мая 2010

Скорее всего, произойдет сбой, когда объект будет автоматически освобожден. autorelease означает «отложенный выпуск», поэтому он будет выпущен: чуть позже. Поскольку объект не будет существовать позже, так как вы вручную его отпускаете, вы, скорее всего, аварийно завершите работу из-за того, что среда выполнения отправит сообщение -release вашему освобожденному объекту.

Изменить: Обратите внимание, что если вы -retain объекты, которые приходят с автоматическим выпуском, вы должны -release их: вы вступаете во владение.

1 голос
/ 05 мая 2010

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

0 голосов
/ 05 мая 2010

Если вы не хотите, чтобы объект попадал в пул авто-релизов, вы можете сделать ручную alloc и initWithCapabity. Если вы сделаете это, вам придется вручную release в какой-то момент.

...