2010-08-08 2 views
1

Im новый для obj-c и проблема с пониманием функция автореферат. Может кто-нибудь объяснить мне, когда я должен использовать его? и как это отличается от выпуска. также мне нужно сбросить пул авторесурсов? как? и когда?объектив-c автообновление

+0

Возможный дубликат [Общие сведения о подсчете ссылок с помощью Cocoa/Objective C] (http://stackoverflow.com/questions/6578/understanding-reference-counting-with-cocoa-objective-c) –

ответ

6

Вызов autorelease расписание a release сообщение, которое будет отправлено объекту в ближайшем будущем, добавив объект в самое верхнее NSAutoreleasePool. Когда пул получает сообщение drain, он отправляет release всем объектам, которые были добавлены к нему.

10 используется в ситуациях, когда метод или функция должны отказаться от владения объектом, но он должен быть временно отключен от dealloc, чтобы его вызывающий абонент мог что-то с этим сделать. Это также полезно при создании методов «удобства», которые обертывают alloc, initWith... и autorelease, чтобы сделать код, который проще распределяет объекты.

+0

поэтому мне нужно слить NSAutoreleasePool вручную? это не сбор мусора? когда я должен назвать метод дренажа? – Yazzmi

+0

Вам не нужно сливать основной NSAutoreleasePool, он будет собирать мусор. Однако, если вы создаете свой собственный NSAutoreleasePool, вам нужно его самостоятельно выпустить. Если у вас есть код, который выделяет много автореализованных объектов (много памяти), вы можете слить пул, чтобы освободить эту память мгновенно, когда она больше не нужна. Если это так, вы должны создать новый NSAutoreleasePool для этого сценария и слить это, а не сливать пул основных/приложений. – Merrimack

+0

Неверно, что это будет сбор мусора - у iPhone совсем нет коллекции мусора. Однако система создает пул перед отправкой события из основной runloop и сбрасывает его после завершения обработки события. – rpetrich

1

Когда вы отправляете -autorelease объекту, он добавляется в список (пул авторесурсов), а когда пул освобождается или сливается, каждый объект в списке получает сообщение -release.

Autorelease - это не что иное, как механизм сообщений с задержкой.

Смежные вопросы