В iOS 5 есть сборка мусора? - PullRequest
21 голосов
/ 05 июля 2011

Мне больше не нужно беспокоиться об управлении памятью iOS 5 и выше? Кроме того, придется ли переписывать все программы, написанные для iOS 4 и более ранних версий, чтобы iOS могла управлять памятью?

Ответы [ 3 ]

39 голосов
/ 05 июля 2011

Вы говорите об автоматическом подсчете ссылок, упомянутом в других ответах.ARC является своего рода GC в том смысле, что он автоматизирует освобождение памяти, но имеет ряд отличий от хорошего сборщика мусора.

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

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

Он также использует ресурсы не так, как автоматический сборщик мусора.Сборщики мусора, используемые с Objective-C, должны сканировать память без ссылок и собирать ее - что дорого и может привести к «заиканию» в более медленных системах - но они должны делать это только изредка, и теоретически может даже точно настроитьих циклы сбора соответствуют тому, как программа фактически использует свою память.В общем, программа GC будет использовать больше памяти, чем программа без GC, и значительно замедлится, когда GC решит собирать данные.ARC, с другой стороны, перемещает «сканирование» во время компиляции и освобождает память, как только она становится доступной, но ему приходится постоянно обновлять счетчики ссылок на объекты, а не ждать, пока мусор будет накапливаться как сборщик.

23 голосов
/ 05 июля 2011

На Apple общедоступной странице iOS 5 они заявляют:

Автоматический подсчет ссылок

Автоматический подсчет ссылок (ARC) дляObjective-C делает управление памятью работой компилятора.Включив ARC с помощью нового компилятора Apple LLVM, вам больше не нужно вводить retain или release снова, что значительно упрощает процесс разработки, уменьшая сбои и утечки памяти.Компилятор полностью разбирается в ваших объектах и ​​выпускает каждый объект в тот момент, когда он больше не используется, поэтому приложения работают так же быстро, как и всегда, с предсказуемой, плавной производительностью.

Это функция компилятора;не является функцией ОС, поэтому я не понимаю, почему она не будет работать со старыми версиями.

9 голосов
/ 05 июля 2011

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

Вы будете беспокоиться меньше об управлении памятью.Существует публичная информация по этому вопросу:

Если спецификация слишком резкая для чтения, короче говоря, вам нужно отредактировать код сохранения / выпуска для использования ARC, но старые программы остаются совместимыми.Чего не следует делать, так это смешивать оба.

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