Цель C - Управление памятью и авто-релиз ??? - PullRequest
3 голосов
/ 28 июля 2011

Гарантирует ли autorelease, что в конце блоков объект будет освобожден?

Или лучше отпустить объекты вручную?

Ответы [ 3 ]

7 голосов
/ 28 июля 2011

Это гарантирует, что оно будет выпущено через некоторое время после выполнения блока, не обязательно сразу после.Это зависит от времени выполнения, чтобы точно определить, когда.

Это не имеет большого значения, если вы не делаете что-то с большим количеством автоматически выпущенных переменных, например, создаете их в большом цикле, или если вы создаете большие автоматически выпускаемые объекты, такие как UIImages.В этих случаях вы должны вручную отпустить, когда вы закончите, в противном случае авто-релиз вполне приемлем.

1 голос
/ 28 июля 2011

Если объект autorelease d, вы НЕ ДОЛЖНЫ вручную release его (если, конечно, он не retain ed). Пул NSAutoRelease, являющийся частью обработчика событий UIKit, release сделает это за вас. Если вы вручную release объекте, пул может вызвать сбой или другое неопределенное поведение, так как объект будет вдвойне - release d.

Если есть случаи, когда вы генерируете много объектов или используете много памяти в объектах, вы можете преимущественно autorelease их (возможно, в вашем цикле), создавая собственные NSAutoReleasePool - пулы могут быть вложенными .

0 голосов
/ 28 июля 2011

Лучше освобождать объекты, а не авто-релиз, если, конечно, у вас нет явной причины использовать авто-релиз, например, используйте авто-релиз при возврате объекта, сохраненного методом, и вы не можете избежать этого.

В основномautorelease следует использовать как оправдание, чтобы полностью избежать управления памятью.Вы хотите освободить объекты как можно скорее.Авто-релиз просто говорит, что объект будет выпущен в будущем.

...