Какая связь между автоматическим выпуском пула и сборкой мусора?

Я прочитал это из документации Apple.

В среде со сборкой мусора Release - это запретная операция (инструкция по бездействию). Таким образом, NSAutoreleasePool предоставляет метод слива, который в среде с подсчетом ссылок ведет себя так же, как вызов release, но который в среде со сборкой мусора запускает сборку мусора (если память, выделенная с момента последней сборки, превышает текущий порог). Таким образом, как правило, вы должны использовать слив, а не выпуск, чтобы избавиться от пула с автоматическим выпуском.

но не понимает смысла

1) «если объем памяти, выделенный с момента последней коллекции, превышает текущий порог».

и

2) ios не поддерживает сборщик мусора, тогда какая польза от слива со сборщиком мусора?


person PJR    schedule 29.03.2012    source источник
comment
Чувак, можно мне эту ссылку, пожалуйста, я хочу прочитать ее сам.   -  person WaaleedKhan    schedule 29.03.2012
comment
Да, Addicted, вы можете найти его developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/.   -  person PJR    schedule 29.03.2012


Ответы (1)


1) Вероятно, это означает, что GC запоминает объем выделенной памяти, и при следующем вызове drain объем выделенной памяти сравнивается с последним объемом. Только если изменение достаточно значительное, происходит сборка мусора.

Позвольте мне объяснить это по-другому: сборка мусора может быть дорогостоящей, поэтому вам нужно решить, когда ее собирать. Чтобы избежать ненужной работы, сборщик мусора может запомнить объем памяти после запуска сбора (например, используется 25 МБ). Теперь, когда в следующий раз сборщик мусора рассматривает возможность сбора, он сначала решает, стоит ли выполнять всю работу. Например, если объем используемой памяти сейчас составляет 25,5 МБ, вероятно, ничего делать не стоит. Но если сейчас используется 50 МБ, сбор полезен.

2) Этот материал возник на Mac, где доступен сборщик мусора. Чтобы обеспечить совместное использование кода между iOS и Mac OS X, эти, казалось бы, ненужные методы по-прежнему остаются в iOS, чтобы оставаться максимально совместимыми с Mac OS X. Я даже подозреваю, что это связано с тем, что iOS на самом деле является «вилкой» Mac OS X и унаследовала все это.

person DarkDust    schedule 29.03.2012
comment
а для 2) сток пригодится только когда требуется совместное использование кода между ios и mac? - person PJR; 29.03.2012
comment
ane для 1) когда я вызываю сток, он будет сравнивать память с последним amout или удалит эту память? - person PJR; 29.03.2012
comment
@PJR: drain также является единственным вариантом для уничтожения пула автозапуска с помощью ARC (хотя в настоящее время вы, вероятно, будете использовать директиву @autoreleasepool). - person Chuck; 29.03.2012
comment
@PJR: Нет, это не сравнение памяти. Что делает GC, я не знаю. Но в документации предполагается, что он запомнил объем используемой памяти и сравнивает это число с текущим объемом используемой памяти. Только если разница достаточно велика, сборщик мусора начинает очистку брошенных объектов. - person DarkDust; 30.03.2012