NSString или выпуск NSArray? - PullRequest
0 голосов
/ 18 июля 2011

Когда я выполняю [выпуск NSString] или [выпуск NSArray] или [выпуск NSMutableArray], что происходит?Память стала стираться?Или просто положить в стек и выбросить из кучи, или наоборот?

Если я просто хочу сбросить память, когда я закончу с ней, лучше ли использовать «release»?

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

спасибо

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Просто прочитайте Руководство по программированию управления памятью и на ваши вопросы ответят.

Кроме того, если вы имеете дело с большим количеством матриц, вы можете использовать пулы с автоматическим выпуском вручную.

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

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

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

Обратите внимание, что это означает, что если вы отпустите объект слишком рано, вы все равно сможете использовать его некоторое время, но он может в любой момент внезапно перейти в "пуф" ипревращаться в совершенно другой объект, вызывая загадочные ошибки.

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

Когда я выполняю [выпуск NSString] или [выпуск NSArray] или [выпуск NSMutableArray], что происходит?

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

Память стала стираться?Или просто толкнул в стек и упал из кучи, или наоборот?

Не обязательно.Память может стереться (в том смысле, что она больше не содержит действительный экземпляр объекта и может быть перезаписана другими вещами), как только retainCount достигнет 0 (или меньше, если вы перепроизводите что-то), но это не гарантируетсяпроизойдет сразу после вашего звонка на release.На самом деле освобожденный экземпляр может оставаться на некоторое время, если он связан с NSAutoreleasePool, который не часто сливается, или если кто-то еще вызвал retain.

Если я простохотите сделать дамп памяти, когда я закончу с этим, лучше ли использовать "release"?

В общем, да.Если вам нужен действительно низкоуровневый контроль над вещами, вы также можете использовать malloc() и free() вместо этого, что освободит память быстрее, чем вызов release.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...