Объект выпускает на выходе программы, действительно необходимом?

14
задан MrWhite 4 February 2019 в 21:45
поделиться

4 ответа

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

На стороне Linux вещей, "куча" выращена использующей sbrk системный вызов. Это выращивает полное пространство памяти процессора большим блоком за один раз (таким образом, только один sbrk необходим для обеспечения достаточного количества пространства для многих malloc с. Когда процесс уходит, ядро исправляет всю память, выделенную sbrk. Поэтому Вы в безопасности. Ядро также закроет любые дескрипторы файлов, открытые тем одним процессом.

существует несколько проблем, которые могут подойти. Если Ваш процесс когда-нибудь fork с в несвоевременный момент, какие-либо открытые дескрипторы файлов будут дублированы. Я рассматривал эту декларацию саму как соединение TCP, загадочно зависающее живой после того, как исходный процесс умер, который является противен . Кроме того, существуют другие ресурсы, которые не просто ограничены по объему процессом, таким образом, они не будут исправлены, когда процесс умрет. Это включает сегменты общей памяти, временные файлы, именованные каналы и сокеты UNIX и вероятно убивание других механизмов IPC.

, Таким образом? Память прекрасна. Дескрипторы файлов обычно прекрасны. Некоторые более тайные функции IPC будут ужасно повреждены если не очищенный.

27
ответ дан 1 December 2019 в 08:44
поделиться

На iPhone Вы не должны, и насколько я знаю, Вы не можете. После получения applicationWillTerminate: у Вас есть несколько секунд для сохранения состояния, и затем ОС уничтожает процесс. Создайте одно из демонстрационных приложений и поместите точку останова в один из dealloc методов. Они никогда не поражаются.

Вот огромный спор об этом: текст ссылки

Примечание: Objective C dealloc не является тем же самым как Deconstructor C++. В Deconstructor можно закрыть файлы, дескрипторы, и т.д. В Objective C dealloc только для того, чтобы освободить память. Необходимо закрыть другие ресурсы ранее, так как dealloc никогда нельзя называть.

4
ответ дан 1 December 2019 в 08:44
поделиться

Действительно не необходимо, но если можно хотеть переработать someof источник и использовать его в другой программе, Вы могли бы получить утечки памяти. Около, никогда не полагайте, что ОС без любого отказа. Это могло "забыть" освобождать некоторые ресурсы.

1
ответ дан 1 December 2019 в 08:44
поделиться

Выпуск может помочь Вам найти ошибки. Как правило, проблемы с динамической памятью инициировали во время выпуска (например, Вы пытаетесь выпустить недопустимый объект). Всегда выпуск может помочь Вам определить ошибки, которые иначе было бы трудно найти.

0
ответ дан 1 December 2019 в 08:44
поделиться