2012-03-29 5 views
1

Я прочитал это из apple docs ..Какова связь пула авторефератов с сборкой мусора?

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

, но не получает значение

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

и

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

+0

Чувак, у меня есть эта ссылка, пожалуйста, я хочу ее прочитать. – WaaleedKhan

+0

Да, зависимый вы можете найти его https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-SW4 – PJR

ответ

1

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

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

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

+0

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

+0

ane for 1) когда я звоню в канализацию, он будет сравнивать память с последним amout или он собирается удалить эту память? – PJR

+0

@PJR: «дренаж» также является единственным вариантом для уничтожения пула автозапуска с ARC (хотя вы, вероятно, в настоящее время используете директиву '@ autoreleasepool'). – Chuck