Я собираюсь с уважением не согласиться со всеми, кто до сих пор ответил, и сказать вам, чтобы вы не отказались от немедленной отмены сборки мусора на Mac. Все мои приложения Mac используют сборку мусора, и все новые приложения, которые я создаю, будут это делать.
Там, где сборка мусора спасла меня, огромное количество проблем связано с многопоточным кодом. Я считаю себя достаточно здравым, когда дело доходит до управления памятью, но крайние случаи, связанные с выпуском и автоматическим выпуском между потоками, приводили к случайным сбоям в огромной части программного обеспечения управления робототехникой, пока я не преобразовал его в сборщик мусора. Впоследствии все эти проблемы исчезли, что привело к гораздо большей стабильности в целом (я работал в течение шести месяцев, не видя сбоя в одной из более свежих версий).
Если вы разрабатываете код, который будет использоваться совместно с Mac и iOS, обязательно пишите, следуя стандартным правилам управления памятью, чтобы сохранить свои хорошие привычки и гарантировать, что вещи можно копировать и вставлять туда и обратно. Затем вы можете включить сборку мусора как параметр времени сборки в версии для Mac, чтобы он действовал как защитная сеть для тех случаев, когда вы пропустили утечку или перепродавку. Вы не будете экономить на коде таким образом, но это может улучшить стабильность вашего приложения при развертывании у ваших пользователей.
Тем не менее, существуют определенные среды, такие как Core Image, которые плохо работают со сборщиком мусора, поэтому, если вы используете одну из них в своем приложении, вам может понадобиться избегать GC.
Как отмечает Майк Эш в своей статье " Лучше выполнять сборку мусора ", тот факт, что сборщик мусора работает в фоновом потоке, может привести к небольшому повышению производительности в некоторых приложениях на многоядерных компьютерах Mac. Например, он может предотвратить остановки в главном потоке, которые вы иногда видите в тесных циклах, когда пулы авто-выпуска истощаются или освобождаются другие объекты.
Наконец, мне нравится тестировать мой кроссплатформенный код Какао в сборщике мусора, чтобы определить, куда я поместил код очистки, не связанный с памятью, в -dealloc
(где он на самом деле не принадлежит), потому что -dealloc
нет дольше вызывается под сборкой мусора. Это помогает мне лучше проектировать мой код.