Почему в iOS нет автоматической сборки мусора? - PullRequest
13 голосов
/ 17 июня 2011

При разработке с Objective-C для iOS управление памятью в настоящее время должно выполняться разработчиком. Некоторые другие мобильные платформы используют автоматическую сборку мусора, чтобы устранить необходимость в управлении памятью.

Какие могут быть причины, по которым сборка мусора не используется на устройствах iOS?

Ответы [ 3 ]

20 голосов
/ 17 июня 2011

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

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

10 голосов
/ 17 июня 2011

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

Итог : Вы не можете сказать: «Хорошо. Я знаю, что эти объекты будут освобождены вX момент времени, и он не будет сталкиваться с другими происходящими событиями. "

3 голосов
/ 17 июня 2011

Основная причина - это, вероятно, загрузка памяти и производительность.Счетчик ссылок имеет меньший профиль памяти, так как позволяет количеству, используемому приложением, расти намного больше, чем счетчик ссылок.Кроме того, существует проблема производительности в том, что при запуске сборщика мусора другие потоки должны быть остановлены.Это не очень большая проблема для Macintoshes с быстрыми многоядерными процессорами, но может привести к зависанию пользовательского интерфейса на мобильных устройствах.Clang / LLVM только что добавил новую функцию под названием автоматический подсчет ссылок .Это позволяет анализировать возможность автоматически помещать данные об удержаниях, выпусках и автоматических выпусках, чтобы у программиста тоже не было.

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