Как освободить память сразу в iOS? - PullRequest
1 голос
/ 18 ноября 2011

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

Но что я могу сделать для освобождения всей памяти, которую я могу, перед запуском библиотеки, которая будет использовать много памяти? Или как можно сразу освободить память?

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Управление памятью - важная вещь в iOS, но этот кусочек информации очень помог мне во время моей разработки.

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

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

Приложения iOS имеют цикл событий, в котором выполняется ваш код. После каждой итерации цикла событий пул автоматического выпуска очищается. Любой объект с сохранениемотсчитывается значение 0.

По умолчанию автоматически освобожденные объекты возвращаются методами, которые не начинаются с new, copy, mutableCopy, retain или init. Это означает, что вы можете использовать их немедленно, но если вы этого не сделаетесохраните их, объект будет пропущен на следующей итерации цикла выполнения.

Если вы не сможете освободить, сохранитеОбъекты ed, но больше не ссылаются на них, тогда у вас будет утечка памяти, это может быть обнаружено инструментом утечек в Инструментах.

Одна из стратегий состоит в том, чтобы автоматически высвобождать все, возвращенное вышеупомянутыми именованными методами, и сохранять объекты в свойствах сохранения.(или скопируйте для строк).В методе dealloc вашего объекта установите все ваши свойства равными nil.Установка для свойства retain / copy значения nil освобождает объект, на который он в данный момент указывает.До тех пор, пока у вас нет циклических ссылок (избегая использования не сохраняющих свойств для «родительских» объектов, таких как делегаты), вы никогда не столкнетесь с утечками. "

вот ссылка на поток дляэта информация

http://www.quora.com/What-is-the-best-way-to-understand-memory-management-in-iOS-development

Это хорошая ветка с некоторыми полезными примерами кода и другими ссылками.

1 голос
/ 18 ноября 2011

Релиз освобождает память немедленно (при условии, что это последний релиз).Это означает, что оно может быть снова использовано вашим приложением при распределении.Обратите внимание, что у каждого приложения есть несколько блоков (страниц) свободной памяти, выделенных системой, и при выделении / освобождении части страницы освобожденная память не возвращается автоматически в систему.Он просто помечен как бесплатный и может быть снова использован приложением.

Чтобы понять все это, вам нужно кое-что узнать о том, как операционные системы управляют распределением памяти, виртуальной памятью и т. Д.

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